Защото всеки оператор за сравнение над NULL
появяването в sql филтър трябва (и прави) да направи редът да не бъде избран.
Трябва да използвате нулев безопасен оператор <=>
за сравнение с колона, съдържаща NULL
стойности и други NOT NULL
стойност, но <=>
ще върне 1
когато и двата операнда са NULL
защото NULL
никога не се счита за равно на NULL
.
Това е пример за ситуация, при която нулевият безопасен оператор е полезен:
Имате таблица:
Phones
----
Number
CountryCode (can be NULL)
И искате да изберете всички телефонни номера, които не са от Испания (код на държавата 34). Първият опит обикновено е:
SELECT Number FROM Phones WHERE CountryCode <> 34;
Но забелязвате, че има телефони без код на държавата (стойност NULL), които не са посочени и искате да ги включите в резултата си, защото не са нито от Испания:
SELECT Number FROM Phones WHERE CountryCode <=> 34;