NULL in SQL und die dreiwertige Logik
Kurz: In SQL bedeutet NULL „unbekannt”, nicht „leer” oder „null”. Vergleiche mit NULL liefern weder wahr noch falsch, sondern ebenfalls „unbekannt”.
Genauer: SQL kennt drei Wahrheitswerte: TRUE, FALSE, UNKNOWN. Eine Zeile erscheint im Ergebnis eines WHERE nur, wenn die Bedingung TRUE ist.
Im Detail
- Vergleiche:
NULL = NULList UNKNOWN, nicht TRUE. DeshalbIS NULLundIS NOT NULLverwenden. Für Vergleiche mit Gleichheit auf NULL-Basis:IS NOT DISTINCT FROM. - Typische Falle:
WHERE status <> 'x'liefert keine Zeilen mitstatus IS NULL. - NOT IN:
x NOT IN (1, 2, NULL)liefert nie TRUE, weil der Vergleich mit NULL UNKNOWN ist. BesserNOT EXISTS. - Rechnen:
5 + NULList NULL.COALESCE(a, 0)ersetzt NULL durch einen Standardwert. - Aggregate:
COUNT(*)zählt Zeilen,COUNT(spalte)zählt nur Nicht-NULL-Werte.SUMundAVGignorieren NULL. - Sortierung: NULL steht je nach System am Anfang oder Ende.
NULLS FIRST/LASTlegt es fest. - Entwurf: Wo möglich
NOT NULLmit Standardwert deklarieren.
Siehe auch: NULL-Konzept, SQL