Hodnoty NULL mají zvláštní chování:porovnání čehokoli s hodnotou NULL vám vrátí hodnotu NULL , což je něco jiného než false nebo 0 . Znamená to „neznámý“.
Vezměme si například tuto tabulku:
user_id | gender
------------------
1 | NULL
2 | 'M'
3 | 'F'
4 | 'F'
SELECT * FROM mytable WHERE gender = 'M' vrátí 1 řádek podle očekávání
SELECT * FROM mytable WHERE gender != 'M' vrátí 2 řádky, NE 3 řádky.
SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL vrátí očekávané 3 řádky.
Upravit:U některých aplikací pomocí 0 (nebo, nedej bože, další "magické číslo") místo NULL není ani vhodné (jednotky nebo přesné hodnoty nejsou v tomto příkladu relevantní):
Date | Temperature
--------------------------
2010-01-01 | 10
2010-01-02 | 4
2010-01-03 | 0
2010-01-04 | -22
2010-01-05 | -45
2010-01-06 | NULL
2010-01-07 | -34
Zde je NULL 6. ledna znamená "hodnota neznámá" - možná proto, že teplota byla tak nízká, že sonda teploměru přestala reagovat. Je to však úplně jiný význam než 3. ledna, kdy byla teplota 0 , tedy 0 stupňů.
Také, jak zmiňuje @Bill Karwin, hodnoty NULL se chovají speciálně v agregačních funkcích (COUNT ,SUM ,AVG atd.):výpočet AVG(Temperature) na výše uvedených datech by vám dalo -14.5 , protože řádek NULL je ignorován.