0Pricing
Coding Interview Prep · Lektion

IS NULL, IS NOT NULL und NULL-sichere Gleichheit

NULL korrekt prüfen und die NULL-sicheren Operatoren der jeweiligen SQL-Variante verwenden

IS NULL, IS NOT NULL und NULL-sichere Gleichheit ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

NULL richtig prüfen

Die vorherige Lektion hat gezeigt, dass Sie NULL nicht mit = finden können. Wie prüfen Sie NULL dann tatsächlich? Mit den speziellen Prädikaten IS NULL und IS NOT NULL.

Dies sind die einzigen korrekten und portablen Möglichkeiten, auf fehlende Werte zu prüfen. Interviewerinnen und Interviewer lehnen col = NULL jedes Mal ab, wenn sie es sehen.

In dieser Lektion geht es um IS NULL, IS NOT NULL, die Familie IS DISTINCT FROM und die dialektspezifischen NULL-sicheren Gleichheitsoperatoren. Die datenbankübergreifenden Unterschiede zu kennen, ist ein starkes Signal für fortgeschrittene Kenntnisse.

IS NULL und IS NOT NULL

IS NULL liefert TRUE, wenn der Wert NULL ist, und andernfalls FALSE. Entscheidend ist, dass es nie UNKNOWN liefert und daher direkt in WHERE sicher verwendet werden kann.

IS NOT NULL ist das exakte Gegenstück: TRUE für jeden tatsächlichen Wert, FALSE für NULL.

Diese Prädikate sind die wichtigsten Werkzeuge für den Umgang mit NULL. Sie gehören zum SQL-Standard und verhalten sich in MySQL, Postgres, SQL Server, Oracle und SQLite identisch.

-- Find employees with no recorded bonus
SELECT name FROM employees WHERE bonus IS NULL;

-- Find employees that do have a bonus
SELECT name FROM employees WHERE bonus IS NOT NULL;

Warum col = NULL immer falsch ist

Ein sicherer Interview-Stolperstein: Eine Kandidatin oder ein Kandidat schreibt WHERE bonus = NULL in der Erwartung, fehlende Boni zu finden. Die Abfrage liefert null Zeilen.

Denken Sie an die dreiwertige Logik: bonus = NULL ist für jede Zeile UNKNOWN, auch für die Zeilen mit NULL, weil nichts gleich einem unbekannten Wert ist. WHERE behält nur TRUE, daher passt nichts.

Einige Datenbanken schreiben = NULL in nicht standardkonformen Modi stillschweigend in IS NULL um. Darauf dürfen Sie sich jedoch niemals verlassen. Schreiben Sie immer ausdrücklich IS NULL.

-- WRONG: returns zero rows, bonus = NULL is UNKNOWN for all
SELECT name FROM employees WHERE bonus = NULL;

-- RIGHT:
SELECT name FROM employees WHERE bonus IS NULL;

NULL-Werte und Nicht-NULL-Werte zählen

Eine häufige Aufgabe für Analystinnen und Analysten ist die Prüfung der Datenqualität: Wie vollständig ist eine Spalte? Kombinieren Sie IS NULL mit COUNT, um fehlende Werte zu melden.

Beachten Sie den Unterschied: COUNT(*) zählt jede Zeile, während COUNT(bonus) nur Boni zählt, die nicht NULL sind. Die Differenz entspricht der Anzahl der NULL-Werte; auf diese Tatsache kommen wir in der Lektion zu Aggregationen zurück.

SELECT
  COUNT(*)                                AS total_rows,
  COUNT(bonus)                            AS with_bonus,
  COUNT(*) - COUNT(bonus)                 AS missing_bonus,
  SUM(CASE WHEN bonus IS NULL THEN 1 ELSE 0 END) AS missing_check
FROM employees;

Das Problem, das NULL-sichere Gleichheit löst

Angenommen, Sie möchten zwei Spalten abgleichen und „beide NULL“ als Übereinstimmung behandeln. Der einfache Vergleich a = b schlägt fehl: Wenn beide NULL sind, lautet das Ergebnis UNKNOWN, sodass das Paar ausgeschlossen wird, obwohl sie intuitiv „gleich“ sind.

Das tritt auf, wenn Sie eine alte Zeile mit einer neuen Zeile vergleichen, um Änderungen zu erkennen, oder wenn Sie über optionale Spalten verknüpfen. Sie benötigen einen Vergleich, bei dem NULL gleich NULL TRUE ergibt und NULL im Vergleich mit einem Wert FALSE ergibt. Genau das ermöglicht NULL-sichere Gleichheit.

-- Goal: change-detection where two NULLs count as equal
-- Plain equality fails when both sides are NULL:
--   NULL = NULL -> UNKNOWN (treated as not-equal)
SELECT * FROM old_t o JOIN new_t n ON o.id = n.id
WHERE o.note = n.note;  -- misses rows where both notes are NULL

IS DISTINCT FROM (Standard-SQL)

Der ANSI-standardisierte NULL-sichere Vergleich ist IS DISTINCT FROM und seine Umkehrung IS NOT DISTINCT FROM. Diese werden in Postgres, SQL Server (2022+) und anderen Systemen unterstützt.

  • a IS NOT DISTINCT FROM b bedeutet „gleich, wobei NULL = NULL als gleich gilt“.
  • a IS DISTINCT FROM b bedeutet „verschieden, wobei NULL wie ein normaler Wert behandelt wird“.

Diese Vergleiche liefern immer TRUE oder FALSE, nie UNKNOWN, und sind daher überall sicher, wo ein Prädikat erwartet wird.

-- TRUE when notes match, including both NULL
SELECT * FROM old_t o JOIN new_t n ON o.id = n.id
WHERE o.note IS NOT DISTINCT FROM n.note;

-- TRUE when notes differ (NULL vs value counts as different)
SELECT * FROM old_t o JOIN new_t n ON o.id = n.id
WHERE o.note IS DISTINCT FROM n.note;

Der <=>-Operator von MySQL

MySQL bietet einen kompakten NULL-sicheren Gleichheitsoperator, der als <=> geschrieben wird (der sogenannte Spaceship-Operator).

a <=> b liefert 1 (TRUE), wenn beide Seiten gleich sind oder beide NULL sind, und andernfalls 0 (FALSE). Er entspricht in MySQL IS NOT DISTINCT FROM.

Wenn Sie in einem Interview speziell nach NULL-sicherem Abgleichen in MySQL gefragt werden, ist dies die idiomatische Antwort.

-- MySQL: 1 when both equal or both NULL
SELECT (NULL <=> NULL) AS both_null,   -- 1
       (NULL <=> 5)    AS null_vs_val, -- 0
       (5 <=> 5)       AS val_eq;      -- 1

SELECT * FROM old_t o JOIN new_t n ON o.id = n.id
WHERE o.note <=> n.note;

Spickzettel für mehrere Dialekte

Interviewer schätzen Bewerber, die die Grenzen der Portabilität kennen. Hier ist die Übersicht zu NULL-sicheren Gleichheitsvergleichen:

  • ANSI / Postgres / SQL Server 2022+: IS NOT DISTINCT FROM
  • MySQL / MariaDB: <=>
  • SQLite: IS und IS NOT funktionieren als NULL-sichere Gleichheitsoperatoren
  • Oracle: kein nativer Operator; emulieren Sie ihn mit DECODE(a, b, 1, 0) = 1 oder mit COALESCE-Tricks

Wenn Sie sich bei der Engine nicht sicher sind, greifen Sie auf die portable manuelle Form zurück, die als Nächstes gezeigt wird.

-- SQLite NULL-safe equality
SELECT * FROM t WHERE a IS b;      -- TRUE when both NULL
SELECT * FROM t WHERE a IS NOT b;  -- complement

Portables manuelles NULL-sicheres Matching

Wenn kein nativer Operator verfügbar ist, können Sie eine NULL-sichere Gleichheit aus Grundbausteinen zusammensetzen. Das portable Muster kombiniert eine normale Gleichheitsprüfung mit einer ausdrücklichen Klausel für den Fall, dass beide Werte NULL sind.

Lesen Sie es so: „Sie sind gleich ODER beide fehlen.“ Das funktioniert mit jeder Datenbank und ist daher eine hervorragende Antwort, wenn der Interviewer keinen Dialekt vorgibt.

SELECT *
FROM old_t o JOIN new_t n ON o.id = n.id
WHERE (o.note = n.note)
   OR (o.note IS NULL AND n.note IS NULL);

-- Alternative using COALESCE with a sentinel that
-- cannot occur in real data:
-- WHERE COALESCE(o.note, '##NULL##') = COALESCE(n.note, '##NULL##')

Tiefergehendes Beispiel: NULL-sichere JOIN-Schlüssel

Ein realistischer Stolperstein: ein Join über einen NULL-fähigen Schlüssel. Wenn region auf beiden Seiten NULL sein kann, verwirft ein gewöhnlicher Equi-Join diese Paare unbemerkt, weil NULL = NULL UNKNOWN ergibt.

Wenn die Geschäftsregel lautet: „Zeilen ohne Region sollen trotzdem zu anderen Zeilen ohne Region passen“, müssen Sie die Join-Bedingung NULL-sicher machen. Nennen Sie diese Annahme im Vorstellungsgespräch ausdrücklich und wählen Sie dann den Operator, der zur Engine passt.

-- Postgres / ANSI: match including both-NULL regions
SELECT a.id, b.id
FROM table_a a
JOIN table_b b
  ON a.region IS NOT DISTINCT FROM b.region;

-- MySQL equivalent: ON a.region <=> b.region

Wichtige Punkte fürs Vorstellungsgespräch

So behandeln Sie jede Frage zur NULL-Prüfung souverän:

  • Verwenden Sie immer IS NULL / IS NOT NULL, niemals = NULL.
  • Diese Prädikate liefern nur TRUE oder FALSE und sind daher in WHERE sicher.
  • Für Vergleiche nach dem Muster „NULL ist gleich NULL“ verwenden Sie IS NOT DISTINCT FROM (ANSI) oder <=> (MySQL).
  • Geben Sie an, auf welchen Dialekt Sie abzielen, und bieten Sie bei Unsicherheit die portable OR-Klausel als Alternative an.

Wenn Sie sowohl den Standard als auch den herstellerspezifischen Operator nennen, zeigen Sie eine fachliche Breite, die Interviewer bemerken.

Schnelltest

Wählen Sie den richtigen NULL-sicheren Vergleich.

Zusammenfassung

Sie können jetzt korrekt auf NULL prüfen:

  • IS NULL / IS NOT NULL sind die einzigen korrekten, portablen NULL-Prüfungen; sie liefern niemals UNKNOWN.
  • col = NULL liefert immer null Zeilen und ist ein klassischer Stolperstein im Vorstellungsgespräch.
  • NULL-sichere Gleichheit behandelt zwei NULL-Werte als gleich: IS NOT DISTINCT FROM (ANSI/Postgres), <=> (MySQL), IS (SQLite).
  • Wenn kein Operator vorhanden ist, verwenden Sie (a = b) OR (a IS NULL AND b IS NULL).

Als Nächstes: NULL durch COALESCE, NULLIF und herstellerspezifische Funktionen wie ISNULL durch Standardwerte ersetzen.

Häufig gestellte Fragen

Ist die Lektion „IS NULL, IS NOT NULL und NULL-sichere Gleichheit“ kostenlos?

Ja — der vollständige Text von „IS NULL, IS NOT NULL und NULL-sichere Gleichheit“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „IS NULL, IS NOT NULL und NULL-sichere Gleichheit“?

NULL korrekt prüfen und die NULL-sicheren Operatoren der jeweiligen SQL-Variante verwenden Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Coding Interview Prep zu starten?

Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „IS NULL, IS NOT NULL und NULL-sichere Gleichheit“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?

Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Dreiwertige Logik und UNKNOWN
  2. IS NULL, IS NOT NULL und NULL-sichere Gleichheit
  3. COALESCE, NULLIF und ISNULL
  4. NULL-Werte in Aggregaten, JOINs und DISTINCT
← Zurück zu Coding Interview Prep