# SQL-JOINs erklärt: INNER JOIN und LEFT JOIN

> Ein JOIN verbindet in SQL Daten aus mehreren Tabellen zu einem gemeinsamen Ergebnis, meist über den Fremdschlüssel. Der INNER JOIN liefert nur Zeilen, zu denen es in beiden Tabellen einen Treffer gibt. Der LEFT JOIN gibt zusätzlich alle Zeilen der linken Tabelle zurück, auch ohne Partner. So führt man Daten wieder zusammen, die durch die Normalisierung auf mehrere Tabellen verteilt wurden.

**Autor:** Mr. Benjamin · **Beruf:** IT-Grundlagen
**Veröffentlicht:** 2026-07-16 · **Aktualisiert:** 2026-07-16
**Quelle:** https://yellowbluetech.de/blog/sql-joins

---

Die [Normalisierung](/blog/normalisierung) verteilt Daten sinnvoll auf mehrere Tabellen – aber für eine Auswertung will man sie oft wieder zusammen sehen. Genau das leistet der JOIN: Er führt Tabellen in einer Abfrage zusammen. Für Fachinformatiker:innen ist er tägliches Werkzeug und beliebter Prüfungsstoff.

## Was ist ein JOIN?

Ein JOIN verbindet in einer [SQL](/blog/was-ist-eine-datenbank)-Abfrage die Zeilen **mehrerer Tabellen** zu einem gemeinsamen Ergebnis. Die Verbindung läuft über eine Bedingung – meist gehört ein **Fremdschlüssel** der einen Tabelle zum **Primärschlüssel** der anderen.

> **Merksatz**
>
> Ein JOIN beantwortet die Frage: „Welche Zeilen der einen Tabelle gehören zu welchen Zeilen der anderen?" Die Bedingung nach dem Schlüsselwort **ON** legt fest, was zusammengehört.

Nehmen wir zwei Tabellen: `azubis` (mit einer `klassen_id` als Fremdschlüssel) und `klassen`.

## INNER JOIN: nur die Treffer

Der **INNER JOIN** liefert nur die Zeilen, zu denen es in **beiden** Tabellen einen passenden Partner gibt.

```sql
SELECT azubis.name, klassen.bezeichnung
FROM azubis
INNER JOIN klassen ON azubis.klassen_id = klassen.id;
```

Das Ergebnis enthält jeden Azubi zusammen mit seiner Klasse – aber **nur**, wenn die Klasse existiert. Ein Azubi ohne gültige Klasse taucht nicht auf, eine Klasse ohne Azubis ebenso wenig.

## LEFT JOIN: alle von links

Der **LEFT JOIN** gibt **alle Zeilen der linken Tabelle** zurück – auch die ohne Partner rechts. Fehlt der Partner, stehen dort leere Werte (NULL).

```sql
SELECT azubis.name, klassen.bezeichnung
FROM azubis
LEFT JOIN klassen ON azubis.klassen_id = klassen.id;
```

Jetzt erscheint **jeder** Azubi – und wer noch keiner Klasse zugeordnet ist, steht mit leerem Klassenfeld da. Das ist ideal, um genau solche Lücken zu finden.

## Die Join-Typen im Überblick

| Join-Typ | Liefert |
| --- | --- |
| **INNER JOIN** | nur Zeilen mit Treffer in beiden Tabellen |
| **LEFT JOIN** | alle aus der linken Tabelle, plus Treffer rechts |
| **RIGHT JOIN** | alle aus der rechten Tabelle, plus Treffer links |
| **FULL JOIN** | alle Zeilen aus beiden Tabellen |

> **Prüfungstipp**
>
> Die häufigste Prüfungsfrage ist der Unterschied zwischen **INNER** und **LEFT JOIN**. Merke: Der **INNER JOIN** zeigt nur die Schnittmenge – was in beiden Tabellen passt. Der **LEFT JOIN** zeigt zusätzlich alles aus der ersten Tabelle, auch ohne Gegenstück. Wenn eine Aufgabe lautet „alle Azubis, auch ohne Klasse", ist der LEFT JOIN gefragt.

## Selbstkontrolle

**Frage:** Du willst alle Azubis auflisten, auch die, die noch keiner Klasse zugeordnet sind. Welcher Join passt?

- [ ] INNER JOIN
- [x] LEFT JOIN
- [ ] Ein JOIN ist dafür nicht nötig.
- [ ] Gar kein Join zeigt Zeilen ohne Partner.

**Erklärung:** Der LEFT JOIN gibt alle Zeilen der linken Tabelle zurück, hier also alle Azubis – auch die ohne passende Klasse. Bei ihnen bleibt das Klassenfeld leer. Ein INNER JOIN würde Azubis ohne Klasse weglassen, weil es dort keinen Treffer in beiden Tabellen gibt.

## Häufige Fragen

### Wozu braucht man überhaupt Joins?

Weil normalisierte Datenbanken zusammengehörige Daten auf mehrere Tabellen verteilen, um Redundanz zu vermeiden. Für eine Auswertung will man sie aber oft gemeinsam sehen. Der JOIN führt die Tabellen in der Abfrage wieder zusammen, ohne die Daten dauerhaft zu vermischen.

### Was bedeutet die ON-Bedingung?

Die ON-Bedingung legt fest, welche Zeilen der Tabellen als zusammengehörig gelten. Meist vergleicht sie den Fremdschlüssel der einen mit dem Primärschlüssel der anderen Tabelle. Ohne diese Bedingung wüsste die Datenbank nicht, welche Zeilen sie verbinden soll, und würde jede mit jeder kombinieren.

### Was ist der Unterschied zwischen LEFT und RIGHT JOIN?

Beide behalten alle Zeilen einer Seite, auch ohne Partner. Der LEFT JOIN behält alle Zeilen der zuerst genannten, linken Tabelle, der RIGHT JOIN alle der zweiten, rechten. In der Praxis nutzt man fast immer den LEFT JOIN und dreht bei Bedarf die Reihenfolge der Tabellen um.

### Kann man mehr als zwei Tabellen verbinden?

Ja. Man reiht mehrere JOINs aneinander und verbindet so drei oder mehr Tabellen in einer Abfrage. Jede Verbindung braucht ihre eigene ON-Bedingung. So lassen sich auch komplexe Auswertungen über viele zusammenhängende Tabellen hinweg formulieren.

**Weiterlesen:** [SQL-Grundlagen: Daten mit SELECT abfragen](/blog/sql-grundlagen-select) · [DDL und DML: SQL-Befehle im Überblick](/blog/ddl-dml-sql) · [ER-Modell erklärt: Entity-Relationship-Modell](/blog/er-modell-datenbanken-planen) · [Transaktionen und das ACID-Prinzip](/blog/transaktionen-acid)

## Das Wichtigste in Kürze

- Ein **JOIN** verbindet mehrere Tabellen in einer Abfrage, meist über den **Fremdschlüssel**.
- Die **ON**-Bedingung legt fest, welche Zeilen zusammengehören.
- **INNER JOIN**: nur Zeilen mit Treffer in **beiden** Tabellen.
- **LEFT JOIN**: **alle** Zeilen der linken Tabelle, auch ohne Partner.
