EMZETT.
Login

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 = NULL ist UNKNOWN, nicht TRUE. Deshalb IS NULL und IS NOT NULL verwenden. Für Vergleiche mit Gleichheit auf NULL-Basis: IS NOT DISTINCT FROM.
  • Typische Falle: WHERE status <> 'x' liefert keine Zeilen mit status IS NULL.
  • NOT IN: x NOT IN (1, 2, NULL) liefert nie TRUE, weil der Vergleich mit NULL UNKNOWN ist. Besser NOT EXISTS.
  • Rechnen: 5 + NULL ist NULL. COALESCE(a, 0) ersetzt NULL durch einen Standardwert.
  • Aggregate: COUNT(*) zählt Zeilen, COUNT(spalte) zählt nur Nicht-NULL-Werte. SUM und AVG ignorieren NULL.
  • Sortierung: NULL steht je nach System am Anfang oder Ende. NULLS FIRST/LAST legt es fest.
  • Entwurf: Wo möglich NOT NULL mit Standardwert deklarieren.

Siehe auch: NULL-Konzept, SQL