In SQL betekent de waarde NULL "onbekend" of "afwezig". Het gedraagt zich op een bijzondere manier:
NULL met enige waarde via = of <> geeft altijd UNKNOWN terug, en niet TRUE of FALSE.NULL met IS NULL of IS NOT NULL.NULL geeft NULL terug.Voorbeeld:
SELECT * FROM users WHERE name = NULL; -- retourneert geen rijen SELECT * FROM users WHERE name IS NULL; -- correct SELECT 1 + NULL; -- Resultaat: NULL
Voor het vervangen van NULL worden functies zoals COALESCE(foo, 0) gebruikt (neemt de eerste niet-NULL waarde) of ISNULL(foo, 'default') in SQL Server.
Vraag: Wat is het resultaat van de voorwaarde WHERE some_column <> 'value' in rijen waar some_column - NULL is?
Antwoord:
In deze rijen zal de voorwaarde niet worden uitgevoerd: de vergelijking met NULL geeft UNKNOWN terug, en niet TRUE. Daarom komen rijen met NULL niet in de selectie.
Voorbeeld:
-- some_column | ... -- NULL | ... -- 'abc' | ... -- 'value' | ... SELECT * FROM table WHERE some_column <> 'value'; -- Rij met NULL komt niet binnen
Verhaal
WHERE status <> 'closed' ten onrechte rekeningen met de status = NULL (bijvoorbeeld nieuwe aanvragen). Dit resulteerde in een onjuiste telling van actieve rekeningen — het aantal bleek 15% lager.Verhaal
COALESCE(user_name, 'Geachte klant') toe te voegen aan de mailing. Bijna duizend klanten ontvingen begroetingen zonder naam, wat werd opgevat als een fout in de automatisering.Verhaal
Bij de migratie van de database retourneerde LEFT JOIN meer rijen dan verwacht. Het bleek dat er velden met NULL in de linker tabel waren; filters zoals WHERE b.field = 'X' verwierpen deze rijen na de JOIN, waardoor een deel van de gegevens verloren ging.