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:
| Ausdruck | Ergebnis |
| 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.
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
| Datenbank | COALESCE verfügbar | Zwei-Argument-Alternative | Besonderheit |
| SQL Server / Azure SQL | ja | ISNULL | ISNULL übernimmt den Typ des ersten Arguments |
| PostgreSQL | ja | keine eigene | wertet nur nötige Argumente aus |
| MySQL | ja | IFNULL | Rückgabetyp aus allen Argumenten zusammengefasst |
| MariaDB | ja | IFNULL | Verhalten wie MySQL |
| Oracle | ja | NVL | mindestens zwei Ausdrücke, Short-Circuit |
| SQLite | ja | ifnull | ifnull entspricht COALESCE mit zwei Argumenten |
| Databricks SQL | ja | nvl, ifnull | Argumente 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:
| Kriterium | COALESCE | ISNULL |
| Standard | ANSI-SQL, überall verfügbar | nur T-SQL (SQL Server, Azure SQL) |
| Anzahl Argumente | beliebig viele | genau zwei |
| Ergebnistyp | höchster Typ nach Rangfolge | Typ des ersten Arguments |
| NULL-Fähigkeit des Ergebnisses | COALESCE(NULL, 1) gilt als nullable | ISNULL(NULL, 1) gilt als NOT NULL |
| Auswertung | wird intern zu einem CASE-Ausdruck, Argumente können mehrfach ausgewertet werden | wird einmal ausgewertet |
| (NULL, NULL) ohne Typ | Fehler | liefert 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.
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