In SQL bedeutet der Wert NULL "unbekannt" oder "fehlend". Er verhält sich auf besondere Weise:
NULL mit jedem Wert über = oder <> ergibt immer das Ergebnis UNKNOWN, und nicht TRUE oder FALSE.NULL sollte mit IS NULL oder IS NOT NULL erfolgen.NULL ergibt NULL.Beispiel:
SELECT * FROM users WHERE name = NULL; -- gibt keine Zeilen zurück SELECT * FROM users WHERE name IS NULL; -- korrekt SELECT 1 + NULL; -- Ergebnis: NULL
Um NULL zu ersetzen, verwendet man Funktionen wie COALESCE(foo, 0) (nimmt den ersten nicht-NULL-Wert) oder ISNULL(foo, 'default') in SQL Server.
Frage: Welches Ergebnis liefert die Bedingung WHERE some_column <> 'value' in Zeilen, wo some_column NULL ist?
Antwort:
In diesen Zeilen wird die Bedingung nicht erfüllt: Der Vergleich mit NULL ergibt UNKNOWN, und nicht TRUE. Daher werden die Zeilen mit NULL nicht in die Auswahl einbezogen.
Beispiel:
-- some_column | ... -- NULL | ... -- 'abc' | ... -- 'value' | ... SELECT * FROM table WHERE some_column <> 'value'; -- Zeile mit NULL wird nicht ausgewählt
Geschichte
WHERE status <> 'closed' fälschlicherweise keine Konten mit dem Wert status = NULL (z.B. neue Anträge). Infolgedessen wurde die Anzahl aktiver Konten falsch berechnet – die Zahl stellte sich als 15% niedriger heraus.Geschichte
COALESCE(user_name, 'Sehr geehrter Kunde') vergessen hinzuzufügen. Fast tausend Kunden erhielten Ansprachen ohne Namen, was als Fehler der Automatisierung wahrgenommen wurde.Geschichte
Bei der Migration der Datenbank lieferte LEFT JOIN mehr Zeilen zurück als erwartet. Es stellte sich heraus, dass in der linken Tabelle Felder mit NULL waren; Filter wie WHERE b.field = 'X' nach JOIN wurden diese Zeilen nicht ausgeschlossen, wodurch ein Teil der Daten verloren ging.