Nemlig. NULL
repræsenterer en ukendt værdi, ikke nogen specifik værdi (det er ikke det samme som NULL
i C eller nil
i Ruby osv.) Hvis man i SQL sammenligner noget med den ukendte værdi, er resultatet også ukendt. Og du vil ikke få rækkerne hvor WHERE
tilstand er ukendt.
Prøv dette:
SELECT NULL <> 2;
og du vil se NULL
som resultat.
Prøv dette:
SELECT * FROM t WHERE NULL;
og der kommer ingen rækker ud, selvom tabellen t
er enorm.
Hvis du virkelig har brug for det, du sagde, du ville have (og jeg går ikke ind for dette), kan du gøre noget som dette:
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