2010-09-23 14 views
35

Ich bin überrascht zu sehen, dass IS NULL und = NULL unterschiedliche Ergebnisse in einer Select-Abfrage liefern. Was ist der Unterschied zwischen ihnen? Wann man was benutzt. Ich würde mich freuen, wenn Sie mich ausführlich erklären können.Gibt es einen Unterschied zwischen IS NULL und

+2

Weitere Informationen finden Sie im [Wikipedia Artikel] (http://en.wikipedia.org/wiki/Null_%28SQL%29). –

+0

Dies ist eine dup von einer Reihe von Fragen: http://stackoverflow.com/questions/1843451/why-does-null-null-evaluate-to-false-in-sql-server – Paddy

Antwort

37

= NULL ist immer unknown (dies ist Stück 3 Zustandslogik), aber WHERE Klausel behandelt es als false und fällt aus der Ergebnismenge. Also für NULL sollten Sie IS NULL verwenden

Gründe werden hier beschrieben: Why does NULL = NULL evaluate to false in SQL server

+5

Es ist nicht "falsch". Es ist "unbekannt". Wenn es falsch wäre, wäre 'NOT (X = NULL)' '' wahr '. Das ist nicht der Fall. SQL verwendet 3-wertige Logik. –

+1

@Martin Smith Ich weiß über 3 Zustand Logik. Die 'WHERE'-Klausel behandelt jedoch 'unknown' als' false' und fällt von der Ergebnismenge ab. – Andrey

10

Um zu bestehenden Antworten hinzufügen, es hängt davon ab, ob Sie ANSI_NULLS oder nicht, bei der Verwendung von „= 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

wegen der dreiwertigen Logik von SQL:

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

Auszug aus einem entsprechenden Absatz:

Herausforderungen

Null war die Fokus der Kontroverse und eine Quelle von Debatte wegen seiner zugehörigen dreiwertigen Logik (3VL), spezielle Anforderungen für die Verwendung in SQL-Joins, und die spezielle Handhabung von Aggregatfunktionen und SQL-Gruppierungsoperatoren erforderlich. Computer Wissenschaftsprofessor Ron van der Meyden fasste die verschiedenen Probleme wie folgt zusammen: "Die Inkonsistenzen im SQL-Standard bedeuten, dass es nicht möglich ist, irgendeine intuitive logische Semantik der Behandlung von Nullen in SQL zuzuordnen." Obwohl verschiedene Vorschläge zur Lösung dieser Probleme gemacht wurden, hat die Komplexität der Alternativen ihre weitverbreitete Anwendung verhindert.

+1

+1 Für die einzige Antwort, dies zu erwähnen. –

+1

Bitte posten Sie keine Link-Only-Antworten. Fügen Sie hier die relevanten Informationen aus dem Link ein, sodass Ihre Antwort auch dann nützlich ist, wenn die Zielwebsite nicht mehr angezeigt wird. (Das ist besser als Kommentar.) – jpaugh

Verwandte Themen