Точно. NULL
представлява неизвестна стойност, а не конкретна стойност (не е същото като NULL
в C или nil
в Ruby и др.) В SQL, ако сравните нещо с неизвестната стойност, резултатът също е неизвестен. И няма да получите редовете, където WHERE
състоянието е неизвестно.
Опитайте това:
SELECT NULL <> 2;
и ще видите NULL
като резултат.
Опитайте това:
SELECT * FROM t WHERE NULL;
и няма да излязат редове, дори ако таблицата t
е огромно.
Ако наистина се нуждаете от това, което сте казали, че искате (а аз не препоръчвам това), можете да направите нещо подобно:
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