Miałem zapytanie (dla Postgres i Informix) z NOT INklauzulą zawierającą podzapytanie, które w niektórych przypadkach zwracało NULLwartości, powodując, że ta klauzula (i całe zapytanie) niczego nie zwróciła.
Jak najlepiej to zrozumieć? Myślałem o NULLczymś bez wartości i dlatego nie spodziewałem się, że zapytanie zakończy się niepowodzeniem, ale oczywiście nie jest to właściwy sposób myślenia NULL.
x <> NULLjak postanawiającFALSE, można się spodziewaćNOT (x <> NULL), aby ocenić naTRUE, a tak nie jest. Obaj oceniają naUNKNOWN. Sztuczka polega na tym, że wiersz jest wybierany tylko wtedy, gdyWHEREklauzula (jeśli jest obecna) ocenia naTRUE- wiersz jest pomijany, jeśli klauzula ocenia na jedenFALSElubUNKNOWN. To zachowanie (ogólnie, aNOT INzwłaszcza predykat) jest wymagane przez standard SQL.