2010-09-23 24 views
35

Sono sorpreso di vedere che IS NULL e = NULL stanno dando risultati diversi in una query di selezione. Qual è la differenza tra loro? Quando usare cosa. Sarei felice se mi spiegassi in dettaglio.C'è qualche differenza tra IS NULL e = NULL

+2

Controllare l'articolo [wikipedia] (http://en.wikipedia.org/wiki/Null_%28SQL%29) per ulteriori informazioni. –

+0

Questo è un dup di una serie di domande: http://stackoverflow.com/questions/1843451/why-does-null-null-evaluate-to-false-in-sql-server – Paddy

risposta

37

= NULL è sempre unknown (questo è un pezzo di logica di stato 3), ma WHERE clausola considera come false e gocce dal set di risultati. Così, per NULL si dovrebbe usare IS NULL

motivi sono descritte qui: Why does NULL = NULL evaluate to false in SQL server

+5

Non è 'falso'. È "sconosciuto". Se fosse falso allora 'NOT (X = NULL)' sarebbe 'true'. Questo non è il caso. SQL utilizza la logica di valore 3. –

+1

@ Martin Smith conosco la logica a 3 stati. ma la clausola 'WHERE' tratta' unknown' come 'false' e ​​rimuove dal set di risultati. – Andrey

10

Per aggiungere alle risposte esistenti, dipende se si dispone di ANSI_NULLS su o no, quando si utilizza "= NULL".

-- This will print TRUE 
SET ANSI_NULLS OFF; 
IF NULL = NULL 
    PRINT 'TRUE' 
ELSE 
    PRINT 'FALSE' 

-- This will print FALSE 
SET ANSI_NULLS ON; 
IF NULL = NULL 
    PRINT 'TRUE' 
ELSE 
    PRINT 'FALSE' 
2

a causa della tre valori-logica di SQL:

http://en.wikipedia.org/wiki/Null_%28SQL%29#Three-valued_logic_.283VL.29

estratto di un paragrafo relativo:

sfide

Null è stata la focus di polemiche e una fonte di dibattito a causa della relativa logica a tre valori (3VL), speciali requisiti per il suo utilizzo in join SQL e la gestione speciale richiesta dalle funzioni di aggregazione e dagli operatori di raggruppamento SQL. Computer professore di scienze Ron van der Meyden sintetizzato i vari temi come: "Le incongruenze nello standard SQL significa che non è possibile attribuire eventuali semantica logica intuitive per il trattamento dei valori nulli in SQL." Sebbene siano state fatte varie proposte per risolvere questi problemi , la complessità delle alternative ha impedito l'adozione diffusa di .

+1

+1 Per essere l'unica risposta a menzionare questo. –

+1

Si prega di non pubblicare solo risposte di collegamento. Includi qui le informazioni rilevanti dal link, in modo che se il sito target scompare, la tua risposta sarà comunque utile. (Questo è meglio come commento.) – jpaugh

Problemi correlati