Bitte sehen diese beiden Aussagen: (!)Operator NICHT invertieren nicht das Ergebnis eines NULL Vergleich
select 'true' where (1 = NULL) ;
select 'true' where not (1 = NULL) ;
Beide von ihnen leer zurückkehren!
Das bedeutet also, dass die Ausdrücke (1=NULL)
und not (1=NULL)
beide falsch ausgeben! Aber wie kann das sein? Ich dachte, der Operator NOT(expression)
wird das Ergebnis des Ausdrucks invertieren?
Nach Microsoft: "Vergleichen von NULL mit einem Nicht-NULL-Wert führt immer zu FALSE."
OK, aber das würde bedeuten, dass der Operator NOT
das Ergebnis invertieren muss. Aber warum macht es das nicht?
https://msdn.microsoft.com/en-us/library/ms188074.aspx
EDIT: Ich stellte den falschen Artikel. Mein Zitat ist oben aus diesem Artikel: https://msdn.microsoft.com/en-us/library/ms175118.aspx
Es scheint dieser Artikel einen Fehler hat, wie in den Antworten und Kommentaren unten angegeben.
Sie können nicht 'verwenden =' zu nulls zu vergleichen. Sie müssen 'IS NULL' verwenden. Jeder Vergleich mit '=' mit NULL ergibt 'NULL' und das Gegenteil von' NULL' ist ebenfalls 'NULL'. Es ist dasselbe wie zu fragen: "Ist die Farbe deines Raumschiffs weiß" oder "Ist die Farbe deines Raumschiffs nicht weiß?". Sie können keines von beiden beantworten, weil Sie kein Raumschiff –
@a_horse_with_no_name haben, aber dann ist die Microsoft-Dokumentation falsch. – askolotl
Der Artikel, den Sie verknüpft haben, besagt, dass "ein Operator, der einen oder zwei NULL-Ausdrücke hat, UNKNOWN zurückgibt". Daher wird Ihr '1 = NULL'-Vergleich immer UNBEKANNT zurückgeben, nicht WAHR oder FALSCH. UNBEKANNT kehrt zu UNBEKANNT zurück. Daher bekommst du in beiden Fällen nichts zurück. – strickt01