Das Problem ist, dass NULL nicht als gleichwertig angesehen wird, auch nicht als sich selbst, aber der seltsame Teil ist, dass es auch nicht gleich sich selbst ist.
Berücksichtigen Sie die folgenden Anweisungen (die in SQL Server T-SQL übrigens illegal sind, in My-SQL jedoch gültig sind. Dies ist jedoch das, was ANSI für null definiert und auch in SQL Server mithilfe von case-Anweisungen usw. überprüft werden kann.)
SELECT NULL = NULL -- Results in NULL
SELECT NULL <> NULL -- Results in NULL
Es gibt also keine richtige / falsche Antwort auf die Frage, stattdessen ist die Antwort auch null.
Dies hat viele Auswirkungen, zum Beispiel in
- CASE-Anweisungen, bei denen jeder Nullwert immer die ELSE-Klausel verwendet, es sei denn, Sie verwenden explizit die WHEN IS NULL-Bedingung ( NICHT die
WHEN NULL
Bedingung ).
- String-Verkettung, as
SELECT a + NULL -- Results in NULL
- Stellen Sie in einer WHERE IN- oder WHERE NOT IN-Klausel sicher, dass in der korrelierten Unterabfrage alle Nullwerte herausgefiltert werden, als ob Sie korrekte Ergebnisse wünschen.
Sie können dieses Verhalten in SQL Server durch Angabe überschreiben. Dies SET ANSI_NULLS OFF
wird jedoch NICHT empfohlen und sollte nicht durchgeführt werden, da dies viele Probleme verursachen kann, einfach aufgrund einer Abweichung vom Standard.
(Als Randnotiz gibt es in My-SQL die Option, einen speziellen Operator <=>
für den Nullvergleich zu verwenden.)
Im Vergleich dazu wird in allgemeinen Programmiersprachen null als regulärer Wert behandelt und ist gleich sich selbst. Dies ist jedoch der NAN-Wert, der auch nicht gleich sich selbst ist, aber zumindest 'false' zurückgibt, wenn er mit sich selbst verglichen wird (und Wenn geprüft wird, ob verschiedene Programmiersprachen nicht gleich sind, haben sie unterschiedliche Implementierungen.
Beachten Sie jedoch, dass es in den Basissprachen (z. B. VB usw.) kein Schlüsselwort 'null' gibt und stattdessen das Schlüsselwort 'Nothing' verwendet wird, das nicht im direkten Vergleich verwendet werden kann. Stattdessen muss 'IS' wie in SQL verwendet werden. es ist jedoch in der Tat gleich sich selbst (wenn indirekte Vergleiche verwendet werden).