czytałem ten artykuł: Get null == null in SQLdlaczego nie jest zerowy równy null fałszywy
I zgoda, że gdy próbuje przetestować równość między dwoma (pustych) kolumnach SQL, właściwym podejściem jest:
where ((A=B) OR (A IS NULL AND B IS NULL))
Gdy A i B mają wartość NULL, (A = B) nadal zwraca FALSE, ponieważ wartość NULL nie jest równa NULL. Dlatego wymagana jest dodatkowa kontrola.
A co z testowaniem nierówności? Wynikające z powyższej dyskusji, to mnie myśleć, że nierówności testowym musiałbym zrobić coś takiego:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Jednak zauważyłem, że nie jest konieczne (przynajmniej nie na Informix 11.5), i mogę po prostu wykonaj:
where (A<>B)
Jeśli A i B mają wartość NULL, to zwraca FALSE. Jeśli NULL nie jest równe NULL, to czy nie powinno to zwracać PRAWDA?
EDIT
Są to dobre odpowiedzi, ale myślę, że moje pytanie było trochę niejasne. Pozwól mi przeformułować:
Zważywszy, że A lub B może być NULL, czy to wystarczy, aby sprawdzić ich nierówności z
where (A<>B)
Albo muszę jednoznacznie sprawdzić to w ten sposób:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
ODWOŁUJ SIĘ do tego thread, aby uzyskać odpowiedź na to pytanie.
W skrócie, ' anything = NULL' ma wartość NULL (ani true, ani false). i 'coś <> NULL' również ma wartość NULL. –