LX

COALESCE in SQL: Erklärung, Syntax und Beispiele

Vom LogicExcel-Redaktionsteam••12 Min. Lesezeit•2,370 Wörter

COALESCE in SQL: Erklärung, Syntax und Beispiele

Analystin sieht sich SQL-Abfrage auf fehlende Werte an

COALESCE gibt aus einer Liste von Werten den ersten zurück, der nicht NULL ist. Sind alle Werte NULL, ist auch das Ergebnis NULL. Damit ersetzt du fehlende Werte durch einen Standardwert, führst mehrere Spalten zu einer zusammen und verhinderst, dass eine einzige Lücke deine ganze Berechnung zu NULL macht. Hier findest du die Syntax, sechs Beispiele aus dem Arbeitsalltag, den genauen Unterschied zu ISNULL und die Fehler, die in Reports am häufigsten passieren.

TL;DR

  • COALESCE(a, b, c) liefert den ersten Wert, der nicht NULL ist, von links nach rechts geprüft. Sind alle NULL, kommt NULL zurück.
  • Die Funktion gehört zum ANSI-Standard und läuft in SQL Server, PostgreSQL, MySQL, MariaDB, Oracle, SQLite und Databricks praktisch gleich.
  • Typischer Einsatz: COALESCE(rabatt, 0), damit Rechnungen mit fehlenden Werten nicht komplett NULL werden.
  • ISNULL gibt es nur in SQL Server, nimmt genau zwei Argumente und übernimmt den Datentyp des ersten. COALESCE nimmt beliebig viele und bestimmt den Typ nach Rangfolge.
  • COALESCE hört beim ersten Treffer auf. Spätere Argumente werden dann nicht mehr ausgewertet.

Inhaltsverzeichnis

Was COALESCE genau macht

Um COALESCE zu verstehen, musst du NULL verstehen. NULL ist in SQL kein Wert, sondern die Aussage „unbekannt“. Eine leere Telefonnummer, ein noch nicht gesetztes Lieferdatum, ein Rabatt, den niemand eingetragen hat: all das steht als NULL in der Tabelle.

Das Problem: Mit „unbekannt“ lässt sich nicht rechnen. 100 + NULL ergibt NULL, nicht 100. Selbst Vergleiche scheitern, denn laut PostgreSQL-Dokumentation zu Vergleichsoperatoren liefert ein Vergleich mit NULL über = oder <> weder wahr noch falsch, sondern wieder NULL. Wer in Berichten mit Lücken arbeitet, merkt das schnell: Eine Summe, ein Durchschnitt oder ein Gesamtpreis ist plötzlich leer, weil irgendwo eine einzige Zelle fehlt. Die Metabase-Dokumentation zu COALESCE beschreibt genau diesen Fall: Rechnungen mit NULL ergeben NULL, und COALESCE(spalte, 0) behandelt fehlende Werte als Null.

COALESCE ist die Antwort darauf. Die Funktion geht ihre Argumente der Reihe nach durch und gibt das erste zurück, das einen echten Wert hat. Laut Microsoft-Referenz zu COALESCE ist das Ergebnis NULL, wenn alle Argumente NULL sind.

Ein schnelles Gefühl dafür gibt dir diese kleine Tabelle:

AusdruckErgebnis
COALESCE(NULL, 5)5
COALESCE(3, 5)3
COALESCE(NULL, NULL, 'Berlin')'Berlin'
COALESCE(NULL, 0)0
COALESCE(spalte_a, spalte_b, 'unbekannt')erster gefüllter Wert, sonst 'unbekannt'

Syntax und Regeln

Die Grundform ist in allen gängigen Datenbanken dieselbe:

COALESCE(ausdruck1, ausdruck2, ..., ausdruckN)

Drei Regeln solltest du kennen, bevor du die Funktion einsetzt.

1. Reihenfolge entscheidet

COALESCE prüft von links nach rechts und stoppt beim ersten Wert, der nicht NULL ist. Stell deshalb die bevorzugte Quelle an den Anfang und den festen Ersatzwert ans Ende. Die PostgreSQL-Dokumentation zu bedingten Ausdrücken hält fest, dass nur so viele Argumente ausgewertet werden, wie für das Ergebnis nötig sind. Oracle beschreibt dasselbe Verhalten ausdrücklich als Short-Circuit-Auswertung.

COALESCE wählt den ersten vorhandenen Wert

2. Die Datentypen müssen zusammenpassen

Alle Argumente brauchen einen gemeinsamen Datentyp. COALESCE(preis, 'k. A.') scheitert, wenn preis eine Zahl ist, weil Text und Zahl nicht in eine Spalte passen. SQL Server wählt den Ergebnistyp nach Datentyp-Rangfolge, wie die Microsoft-Referenz erklärt. In MySQL ist der Rückgabetyp laut MySQL-Handbuch der zusammengefasste Typ aller Argumente. Willst du Zahlen und Text mischen, wandle die Zahl vorher um, etwa mit CAST(preis AS VARCHAR(20)).

3. Mindestens zwei Argumente

Oracle verlangt mindestens zwei Ausdrücke. Andere Systeme wie Databricks akzeptieren formal auch ein einziges Argument, aber sinnvoll ist das nicht. Gewöhn dir an, immer mindestens zwei zu übergeben, dann läuft dein Code überall.

COALESCE in den wichtigsten Datenbanken

DatenbankCOALESCE verfügbarZwei-Argument-AlternativeBesonderheit
SQL Server / Azure SQLjaISNULLISNULL übernimmt den Typ des ersten Arguments
PostgreSQLjakeine eigenewertet nur nötige Argumente aus
MySQLjaIFNULLRückgabetyp aus allen Argumenten zusammengefasst
MariaDBjaIFNULLVerhalten wie MySQL
OraclejaNVLmindestens zwei Ausdrücke, Short-Circuit
SQLitejaifnullifnull entspricht COALESCE mit zwei Argumenten
Databricks SQLjanvl, ifnullArgumente brauchen einen gemeinsamen Typ
Für SQLite steht die Gleichwertigkeit von ifnull und COALESCE mit zwei Argumenten direkt in der SQLite-Funktionsreferenz, für MariaDB beschreibt die MariaDB-Dokumentation COALESCE als Werkzeug, um NULL durch einen Standardwert zu ersetzen. Wenn du Code schreibst, der auf mehreren Systemen laufen soll, ist COALESCE die sichere Wahl, weil die herstellerspezifischen Varianten jeweils nur in einer Datenbankfamilie funktionieren.

Sechs Beispiele aus der Praxis

Die folgenden Abfragen funktionieren mit kleinen Anpassungen in jeder der genannten Datenbanken.

Beispiel 1: Standardwert für fehlende Angaben

Eine Kundenliste soll keine leeren Zellen zeigen:

SELECT kunde_id,
       name,
       COALESCE(stadt, 'nicht angegeben') AS stadt
FROM kunden;

Alle Kunden ohne Stadt erscheinen jetzt mit „nicht angegeben“. In der Tabelle selbst ändert sich nichts, nur die Ausgabe.

Beispiel 2: Die beste verfügbare Kontaktnummer

Viele Kundentabellen haben mehrere Telefonfelder, die nur teilweise gefüllt sind. Du willst pro Kunde genau eine Nummer, bevorzugt die Mobilnummer:

SELECT name,
       COALESCE(mobil, telefon_geschaeft, telefon_privat, 'keine Nummer') AS kontakt
FROM kunden;

Hier zeigt sich die Stärke gegenüber Zwei-Argument-Funktionen: Vier Fallback-Stufen in einem lesbaren Ausdruck.

Beispiel 3: Rechnen trotz Lücken

Ein Bestellbericht berechnet den Endpreis aus Preis, Menge und Rabatt. Ist der Rabatt NULL, wäre ohne COALESCE der gesamte Endpreis NULL:

SELECT bestell_id,
       preis * menge - COALESCE(rabatt, 0) AS endpreis
FROM bestellungen;

Eine Bestellung mit Preis 49,90, Menge 2 und fehlendem Rabatt ergibt jetzt 99,80 statt einer leeren Zelle.

Achte dabei auf Aggregatfunktionen: SUM und AVG überspringen NULL ohnehin. AVG(COALESCE(bewertung, 0)) ist deshalb nicht dasselbe wie AVG(bewertung). Im ersten Fall zählen fehlende Bewertungen als Null und ziehen den Durchschnitt nach unten. Entscheide bewusst, was fachlich richtig ist.

Beispiel 4: Spalten nach einer Migration zusammenführen

Nach einem Systemwechsel liegt die E-Mail-Adresse mal in der alten, mal in der neuen Spalte:

SELECT kunde_id,
       COALESCE(email_neu, email_alt) AS email
FROM kunden;

Dasselbe Muster funktioniert bei einem FULL OUTER JOIN zweier Tabellen, wenn der Schlüssel auf einer Seite fehlt: COALESCE(a.kunde_id, b.kunde_id).

Beispiel 5: Platzhalter mit NULLIF entschärfen

Manchmal steht statt NULL ein Platzhalter in den Daten, etwa 0,00 oder ein leerer Text. NULLIF ist das Gegenstück zu COALESCE: Es gibt NULL zurück, wenn zwei Ausdrücke gleich sind. Kombiniert räumst du so auf:

SELECT AVG(NULLIF(COALESCE(budget_aktuell, budget_vorjahr), 0.00)) AS durchschnitt
FROM abteilungen;

COALESCE nimmt das aktuelle Budget oder ersatzweise das des Vorjahres. NULLIF macht aus 0,00 ein NULL, damit leere Budgets den Durchschnitt nicht verfälschen. Microsoft nutzt genau dieses Muster als Beispiel in seiner NULLIF-Referenz.

Für Textfelder klappt das ebenso: COALESCE(NULLIF(TRIM(stadt), ''), 'nicht angegeben') behandelt leere und nur aus Leerzeichen bestehende Einträge wie fehlende Werte.

Beispiel 6: Sicher teilen

Division durch null bricht eine Abfrage ab. Mit NULLIF im Nenner wird das Ergebnis stattdessen NULL, COALESCE macht daraus einen lesbaren Wert:

SELECT produkt,
       COALESCE(umsatz / NULLIF(stueckzahl, 0), 0) AS umsatz_pro_stueck
FROM verkaeufe;

COALESCE oder ISNULL: der Unterschied in SQL Server

Wer mit SQL Server arbeitet, steht ständig vor der Wahl. Beide ersetzen NULL, aber sie verhalten sich unterschiedlich. Die wichtigsten Punkte stammen aus der Microsoft-Referenz zu COALESCE:

KriteriumCOALESCEISNULL
StandardANSI-SQL, überall verfügbarnur T-SQL (SQL Server, Azure SQL)
Anzahl Argumentebeliebig vielegenau zwei
Ergebnistyphöchster Typ nach RangfolgeTyp des ersten Arguments
NULL-Fähigkeit des ErgebnissesCOALESCE(NULL, 1) gilt als nullableISNULL(NULL, 1) gilt als NOT NULL
Auswertungwird intern zu einem CASE-Ausdruck, Argumente können mehrfach ausgewertet werdenwird einmal ausgewertet
(NULL, NULL) ohne TypFehlerliefert NULL vom Typ int

Was die Unterschiede praktisch bedeuten

Abgeschnittene Texte. Weil ISNULL den Typ des ersten Arguments übernimmt, kann der Ersatzwert gekürzt werden. Ist @kuerzel als VARCHAR(3) deklariert und NULL, liefert ISNULL(@kuerzel, 'unbekannt') nur „unb“. COALESCE wählt den längeren Typ und gibt „unbekannt“ vollständig zurück. Berechnete Spalten mit Constraints. Willst du eine berechnete Spalte als Primärschlüssel oder mit NOT NULL verwenden, funktioniert das mit ISNULL, mit COALESCE dagegen nicht, weil SQL Server das Ergebnis von COALESCE als potenziell NULL einstuft. Microsoft dokumentiert genau diesen Fall. Was die Unterschiede praktisch bedeuten — overview diagram Unterabfragen. Da COALESCE intern als CASE-Ausdruck umgeschrieben wird, kann eine Unterabfrage als Argument mehr als einmal ausgeführt werden. Das kostet Zeit und kann bei gleichzeitigen Änderungen sogar unterschiedliche Ergebnisse liefern. Die Erklärung, dass ISNULL als Funktion nur einmal ausgewertet wird, findest du auch in einer viel zitierten Diskussion auf Stack Overflow und im alten Microsoft-Blogbeitrag zu den Unterschieden.

Unsere Faustregel

  • Code soll auf mehreren Datenbanken laufen: COALESCE.
  • Mehr als zwei Fallback-Werte: COALESCE.
  • Reiner SQL-Server-Code, zwei Argumente, berechnete Spalte mit NOT NULL: ISNULL.
  • Teure Unterabfrage als Argument: Ergebnis vorher in eine Variable oder einen JOIN ziehen, statt sie in COALESCE zu packen.
Erfahrene SQL-Server-Praktiker raten außerdem, NULL-Funktionen nicht reflexhaft in WHERE- und JOIN-Bedingungen zu verteilen. Ein Ausdruck wie WHERE COALESCE(status, 'offen') = 'offen' kann verhindern, dass ein Index genutzt wird. Schneller und klarer ist oft WHERE status = 'offen' OR status IS NULL.

Die häufigsten Fehler mit COALESCE

COALESCE für Vergleiche missbrauchen. Wer zwei Spalten vergleichen will, die NULL enthalten können, schreibt gern COALESCE(a, '') = COALESCE(b, ''). Das macht leeren Text und NULL gleich, was fachlich oft falsch ist. Sauberer ist der Standardoperator IS DISTINCT FROM, der laut PostgreSQL-Dokumentation zwei NULL-Werte als gleich behandelt und NULL gegen einen echten Wert als verschieden. MySQL und MariaDB bieten dafür den Operator <=>. Falscher Ersatzwert. COALESCE(lieferdatum, '1900-01-01') füllt die Lücke, aber dein Bericht zeigt dann Lieferungen aus dem Jahr 1900. Wähle Ersatzwerte, die niemand mit echten Daten verwechselt, oder lass NULL bewusst stehen. Typen mischen. COALESCE(menge, 'keine') führt in SQL Server zu einem Konvertierungsfehler, weil der Text in eine Zahl umgewandelt werden soll. Erst umwandeln, dann ersetzen. Zwei untypisierte NULL. SELECT COALESCE(NULL, NULL) erzeugt in SQL Server einen Fehler, weil mindestens ein Argument einen Typ haben muss. Mit CAST(NULL AS INT) als einem der Argumente läuft es. Riskante Berechnungen an erster Stelle. Short-Circuit hilft nur, wenn die sichere Variante vorne steht. Wenn eine teure oder fehleranfällige Berechnung das erste Argument ist, wird sie immer ausgeführt.

Unsere Sicht: Warum NULL-Logik in Excel anfängt

Wir sehen bei LogicExcel jeden Tag, wie Analystinnen, Controller und Quereinsteiger ihre Reports bauen. Die meisten lernen den Umgang mit fehlenden Werten nicht in SQL, sondern in Excel: eine leere Zelle, die eine SVERWEIS-Formel mit #NV quittiert, ein Durchschnitt, der durch Nullen verzerrt wird, eine Summe, die nicht stimmt, weil Text statt Zahl in einer Spalte steht.

COALESCE ist im Kern dieselbe Denkweise, die du in Excel mit WENN, ISTLEER und WENNFEHLER aufbaust: Was passiert, wenn der erwartete Wert fehlt, und welcher Ersatz ist fachlich richtig? Wer das in Tabellen einmal sauber durchdacht hat, schreibt auch in SQL bessere Abfragen. Umgekehrt gilt: Wer COALESCE nur auswendig gelernt hat, ohne zu üben, greift im Ernstfall zu COALESCE(x, 0), auch wenn Null den Durchschnitt verfälscht.

Deshalb setzen wir auf aktives Üben statt passivem Lesen. Eine Formel selbst einzutippen, sofort zu sehen, ob sie stimmt, und die Erklärung direkt danach zu lesen, verankert Wissen viel stärker als ein weiteres Video. Das gilt für SVERWEIS genauso wie für einen SQL-Befehl.

> — Thomas Houza

COALESCE-Denken direkt üben

Wenn du die Logik hinter COALESCE festigen willst, fang dort an, wo die meisten Daten zuerst landen: in der Tabelle. Unsere 95 kostenlosen Excel-Übungen laufen direkt im Browser, ohne Anmeldung und ohne Installation. Du gibst die Formel selbst ein, bekommst sofort Feedback und zu jeder Antwort eine verständliche Erklärung, von SUMME und WENN über SVERWEIS und INDEX/VERGLEICH bis zu ZÄHLENWENN und Pivot-Tabellen. Wer strukturiert lernen will, findet in unseren Kursen Excel I bis III den Weg von Tabellengrundlagen über Textbereinigung bis zu Verweisen und Logik, also genau den Teil, in dem der Umgang mit fehlenden Werten sitzt.

Häufige Fragen zu COALESCE

Was macht COALESCE in SQL?

COALESCE prüft eine Liste von Ausdrücken von links nach rechts und gibt den ersten zurück, der nicht NULL ist. Sind alle Ausdrücke NULL, ist auch das Ergebnis NULL. Meist ersetzt du damit fehlende Werte durch einen Standardwert, etwa COALESCE(rabatt, 0).

Ist COALESCE langsamer als ISNULL?

Bei einfachen Spalten merkst du in der Regel keinen Unterschied. Relevant wird es, wenn ein Argument eine Unterabfrage ist: COALESCE wird intern zu einem CASE-Ausdruck und kann sie mehrfach ausführen, ISNULL wird nur einmal ausgewertet. In solchen Fällen lohnt es sich, das Ergebnis vorher zu berechnen.

Kann COALESCE mehr als zwei Argumente verarbeiten?

Ja, das ist einer der Hauptvorteile gegenüber ISNULL, IFNULL oder NVL, die nur zwei Argumente kennen. Du kannst beliebig viele Fallback-Stufen angeben, zum Beispiel Mobilnummer, Geschäftsnummer, Privatnummer und zuletzt einen festen Text.

Gibt es COALESCE auch in Excel?

Eine Funktion mit diesem Namen hat Excel nicht. Dieselbe Logik baust du mit verschachtelten WENN-Formeln und ISTLEER oder, bei Fehlerwerten, mit WENNFEHLER. Das Prinzip bleibt gleich: erster brauchbarer Wert, sonst Ersatzwert.

Ändert COALESCE die Daten in meiner Tabelle?

Nein. COALESCE wirkt nur auf das Ergebnis der Abfrage. Willst du NULL dauerhaft ersetzen, brauchst du ein UPDATE, zum Beispiel UPDATE kunden SET stadt = COALESCE(stadt, 'nicht angegeben'). Prüfe vorher, ob NULL fachlich nicht doch die richtige Aussage ist.

Quellen

Weiterlernen

Anleitungen, die andere als Nächstes lesen.