Precies. NULL
vertegenwoordigt een onbekende waarde, geen specifieke waarde (het is niet hetzelfde als NULL
in C, of nil
in Ruby, enz.) Als u in SQL iets vergelijkt met de onbekende waarde, is het resultaat ook onbekend. En je krijgt niet de rijen waar WHERE
staat is onbekend.
Probeer dit:
SELECT NULL <> 2;
en je ziet NULL
als resultaat.
Probeer dit:
SELECT * FROM t WHERE NULL;
en er komen geen rijen uit, zelfs niet als de tabel t
is enorm.
Als je echt nodig hebt wat je zei dat je wilde (en ik pleit hier niet voor), kun je zoiets als dit doen:
SELECT T.f1, T.f2
FROM (SELECT NULL f1, 'a' f2) T
WHERE ((T.f1 IS NULL OR T.f2 IS NULL)
AND (T.f1 IS NOT NULL OR T.f2 IS NOT NULL))
OR T.f1 <> T.f2