Auf einer Party fragst du jemanden nach seinem Geburtsdatum – und er antwortet einfach nicht. Nicht mit einem Datum, nicht mit einem „Weiß ich nicht“, sondern mit absolut gar nichts. So ähnlich funktionieren NULL-Werte in SQL: Sie sind keine Werte, sondern eine Art „Antwortverweigerung“.
NULL-Werte sind in der Welt von Datenbanken eine Quelle großer Verwirrung. Viele Entwickler:innen stolpern über sie, weil NULL weder eine Zahl, noch ein Text oder ein leerer String ist. NULL bedeutet schlicht: „Hier gibt es keinen Wert“ – aber warum ist das so wichtig? Und vor allem: Wie kannst du im Alltag mit NULL-Werten umgehen, ohne dabei Daten zu verlieren oder Abfragen zu verfälschen?
In diesem Artikel erkläre ich dir, was NULL-Werte wirklich bedeuten, welche Stolperfallen sie mit sich bringen und wie du sie richtig behandelst. So wird das Thema NULL für dich keine Blackbox mehr sein, sondern ein Werkzeug, das du sicher beherrschst.

1. Was ist NULL wirklich?
NULL ist kein „Wert“ im klassischen Sinne – sondern eher ein Zustand. In SQL signalisiert NULL, dass ein Wert unbekannt, undefiniert oder schlicht nicht vorhanden ist. Das unterscheidet sich deutlich von anderen Datentypen:
- Ein leerer String (
''
) ist ein definierter Wert – nämlich eine Zeichenkette ohne Inhalt. - Die Zahl
0
ist ein gültiger Wert, der genau so gespeichert und ausgewertet wird. FALSE
ist ein boolescher Wert und damit auch ein Wert.
NULL hingegen bedeutet: Es gibt keine Information über diesen Wert.
Drei häufige Ursachen für NULL:
- Fehlende Daten
Beispielsweise bei einem optionalen Formularfeld, das der Benutzer nicht ausgefüllt hat. - Nicht anwendbare Werte
Zum Beispiel das Ablaufdatum bei einem Produkt, das nicht verderblich ist – hier gibt es einfach keinen Wert. - Unbekannte Werte aus Joins
Wenn du Tabellen verbindest und für einige Zeilen keine passenden Daten vorhanden sind, steht dort oft NULL.
2. Die Tücken von NULL in Operationen
NULL-Werte können deine SQL-Abfragen ganz schön durcheinanderbringen, vor allem wenn du sie mit herkömmlichen Vergleichsoperatoren benutzt.
Vergleiche mit NULL:
Ein häufiger Fehler ist die Verwendung von WHERE column = NULL
. Das funktioniert nicht – denn NULL ist kein Wert, sondern ein Zustand. Ein Vergleich mit =
oder !=
liefert immer FALSE
oder UNKNOWN
zurück, sodass die Zeile nicht ausgewählt wird.
Richtig ist:
SELECT * FROM users WHERE phone IS NULL;
oder für das Gegenteil:
SELECT * FROM users WHERE phone IS NOT NULL;
Logik-Bombe: NULL in Bedingungen
NULL beeinflusst auch logische Ausdrücke. Das liegt daran, dass SQL mit drei Wahrheitswerten arbeitet: TRUE, FALSE und UNKNOWN (wobei UNKNOWN durch NULL repräsentiert wird).
Ausdruck | Ergebnis |
---|---|
NULL AND TRUE |
NULL (UNKNOWN) |
NULL OR FALSE |
NULL (UNKNOWN) |
NOT NULL |
NULL (UNKNOWN) |
Das führt manchmal zu überraschenden Ergebnissen. Zum Beispiel:
SELECT * FROM table WHERE id NOT IN (1, 2, NULL);
Diese Abfrage gibt keine Zeile zurück, weil NOT IN
mit NULL immer UNKNOWN
wird und somit die Zeile ausscheidet.
3. Praktische Lösungen für den Alltag
NULL-Werte können deine SQL-Abfragen ganz schön durcheinanderbringen, vor allem wenn du sie mit herkömmlichen Vergleichsoperatoren benutzt.
Vergleiche mit NULL:
Ein häufiger Fehler ist die Verwendung von WHERE column = NULL
. Das funktioniert nicht – denn NULL ist kein Wert, sondern ein Zustand. Ein Vergleich mit =
oder !=
liefert immer FALSE
oder UNKNOWN
zurück, sodass die Zeile nicht ausgewählt wird.
Richtig ist:
SELECT * FROM users WHERE phone IS NULL;
oder für das Gegenteil:
SELECT * FROM users WHERE phone IS NOT NULL;
Logik-Bombe: NULL in Bedingungen
NULL beeinflusst auch logische Ausdrücke. Das liegt daran, dass SQL mit drei Wahrheitswerten arbeitet: TRUE, FALSE und UNKNOWN (wobei UNKNOWN durch NULL repräsentiert wird).
Ausdruck | Ergebnis |
---|---|
NULL AND TRUE |
NULL (UNKNOWN) |
NULL OR FALSE |
NULL (UNKNOWN) |
NOT NULL |
NULL (UNKNOWN) |
Das führt manchmal zu überraschenden Ergebnissen. Zum Beispiel:
SELECT * FROM table WHERE id NOT IN (1, 2, NULL);
Diese Abfrage gibt keine Zeile zurück, weil NOT IN
mit NULL immer UNKNOWN
wird und somit die Zeile ausscheidet.
4. Fortgeschrittene Szenarien
NULL-Werte bringen nicht nur in einfachen Abfragen Herausforderungen, sondern auch bei komplexeren SQL-Konstrukten.
NULL in Joins:
Standardmäßig schließen JOINs Zeilen aus, wenn auf einer Seite NULL steht, weil der Vergleich fehlschlägt.
Beispiel: Ein INNER JOIN
verbindet nur Zeilen, bei denen der Join-Key übereinstimmt – NULLs passen nicht dazu.
Lösung:
Bei Bedarf kannst du auch explizit NULLs vergleichen, etwa so:
FROM tableA a
LEFT JOIN tableB b
ON a.key = b.key OR (a.key IS NULL AND b.key IS NULL)
Damit werden auch Zeilen verbunden, deren Join-Keys beide NULL sind.
UNIQUE Constraints und NULL:
In vielen Datenbanksystemen dürfen UNIQUE-Spalten mehrere NULL-Werte enthalten, da NULL als „unbekannt“ gilt und deshalb nicht als identisch betrachtet wird. Das kann überraschend sein, wenn man erwartet, dass UNIQUE eine exakte Einzigartigkeit erzwingt.
Performance-Killer:
- Abfragen wie
WHERE spalte <> 1
schließen NULL-Werte aus, weil NULL mit keinem Wert vergleichbar ist. - Indizes werden für NULL-Werte oft nicht genutzt oder nicht vollständig. Einige Systeme bieten sogenannte partielle Indizes an, die z. B. nur Zeilen ohne NULL in einer Spalte indexieren:
CREATE INDEX idx_non_null ON table(spalte) WHERE spalte IS NOT NULL;
Das verbessert die Performance von Abfragen, die NULL-Werte ignorieren.
5. Best Practices
Wenn du regelmäßig mit NULL-Werten arbeitest, helfen dir einige Regeln und Empfehlungen, Fehler zu vermeiden und den Code sauber zu halten.
DOs:
- Default-Werte bei CREATE TABLE definieren:
Vermeide unnötige NULLs, indem du Standardwerte vergibst, z. B.:
CREATE TABLE users ( active BOOLEAN DEFAULT TRUE );
- Immer IS NULL / IS NOT NULL für Vergleiche nutzen:
Statt= NULL
oder!= NULL
immer die korrekten Operatoren verwenden. - Dokumentation von NULL-Bedeutungen im Datenmodell:
Beschreibe, was NULL in welcher Spalte bedeutet — ist es „unbekannt“, „nicht anwendbar“ oder „nicht angegeben“?
DON’Ts:
- NULL für „leer“ missbrauchen:
Nutze lieber boolesche Flags oder andere Werte für „leer“ statt NULL, um Missverständnisse zu vermeiden. - NULL in Primärschlüsseln:
Primärschlüssel sollten nie NULL sein, außer in speziellen Fällen.
6. Fazit: Philosophischer Ausklang
NULL ist wie Schrödingers Wert: Er existiert und existiert nicht gleichzeitig. In der SQL-Welt ist NULL ein faszinierendes Konzept, das zeigt, wie vielschichtig Daten und deren Bedeutung sein können.
Wer NULL richtig versteht, beherrscht nicht nur die Technik, sondern auch die dahinterliegende Logik und Philosophie von Datenbanken. Dieses Verständnis macht dich zum echten SQL-Meister – denn du kannst Daten korrekt interpretieren, Fehler vermeiden und deine Abfragen präzise formulieren.
Also, scheue dich nicht vor NULL – sondern nutze es als Werkzeug, um deine Datenwelt besser zu verstehen!
INSERT INTO – aber richtig! Werte setzen, Spalten weglassen, Defaults nutzen
Viele SQL-Einsteiger – und selbst erfahrene Entwickler – machen bei...
Artikel lesenSQL für Data Analysts: Typische Business-Fragen in SQL übersetzt
In Unternehmen entstehen täglich zahlreiche Fragen, die die Geschäftsleitung, das...
Artikel lesenWas ist eigentlich eine Subquery – und wann ist sie sinnvoll?
Typische Aufgabe aus dem Arbeitsalltag eines Informatikers: Du möchtest alle...
Artikel lesenAudit-Trails implementieren: Wer hat was wann geändert?
Eine kritische Kundennummer wurde in deiner Datenbank geändert, und die...
Artikel lesen