INNER JOIN vs. OUTER JOIN vs. CROSS JOIN – anschaulich erklärt mit Beispielen

JOINs sind ein zentrales Werkzeug in SQL, mit dem Daten aus mehreren Tabellen kombiniert werden können. Ohne JOINs wäre es kaum möglich, komplexe Zusammenhänge zwischen Daten sinnvoll abzubilden oder abzufragen. Gerade für SQL-Einsteiger kann das Konzept von JOINs jedoch verwirrend sein, da es verschiedene Arten gibt, die sich in ihrem Verhalten deutlich unterscheiden.

In diesem Artikel lernst du die drei wichtigsten JOIN-Typen kennen: INNER JOIN, OUTER JOIN (inklusive LEFT, RIGHT und FULL JOIN) sowie CROSS JOIN. Ziel ist es, dir diese Konzepte möglichst einfach und anschaulich zu erklären – ganz ohne theoretischen Overkill. Nach dem Lesen wirst du sicherer im Umgang mit JOINs sein und genau wissen, wann du welchen JOIN einsetzen solltest.

Die Inhalte richten sich vor allem an Anfänger und Anwender, die ihre Kenntnisse rund um JOINs vertiefen und praktische Beispiele verstehen möchten.

SQL Join

Grundlage: Was ist ein JOIN?

Bevor wir in die verschiedenen JOIN-Typen einsteigen, lohnt sich ein kurzer Blick auf das Grundprinzip: Was macht ein JOIN überhaupt?

Stell dir Datenbanken als Sammlungen von Tabellen vor – jede Tabelle speichert Daten zu einem bestimmten Thema (z. B. Kunden, Bestellungen, Produkte). Die einzelnen Tabellen stehen über sogenannte Schlüssel (meist Primär- und Fremdschlüssel) miteinander in Beziehung.

Ein JOIN ist die SQL-Methode, um diese Beziehungen in einer Abfrage herzustellen. So kannst du Informationen aus mehreren Tabellen kombinieren – zum Beispiel, um zu sehen, welcher Kunde welche Bestellung aufgegeben hat.

Das allgemeine Syntax-Grundgerüst für einen JOIN sieht so aus:

SELECT spalten
FROM tabelle1
JOIN_TYP tabelle2 ON tabelle1.schlüssel = tabelle2.schlüssel;

Dabei ersetzt du JOIN_TYP durch den gewünschten JOIN-Typ, z. B. INNER JOIN oder LEFT JOIN.

Beispiel-Tabellen für alle JOINs

Damit die JOINs im weiteren Verlauf anschaulich und nachvollziehbar bleiben, verwenden wir durchgehend zwei Beispiel-Tabellen: Kunden und Bestellungen. Diese Tabellen sind bewusst einfach gehalten und enthalten nur die nötigsten Informationen.

Kunden-Tabelle:

KundenID Name
1Anna
2Bert
3Clara

Bestellungen-Tabelle:

BestellID KundenID Produkt
1011Laptop
1021Maus
1043Tastatur

Hinweise:

  • Bert (KundenID 2) hat keine Bestellung aufgegeben.
  • Die BestellID 103 fehlt absichtlich – dies simuliert eine Lücke in den Daten.

Diese Tabellen dienen als Grundlage für alle weiteren JOIN-Beispiele im Artikel.

INNER JOIN: Nur übereinstimmende Daten

Der INNER JOIN ist der am häufigsten verwendete JOIN-Typ in SQL. Er verknüpft nur die Datensätze, bei denen die Verknüpfungsbedingung erfüllt ist – also dort, wo die Werte in beiden Tabellen zusammenpassen.

Logik: „Zeig mir nur die Paare, die in beiden Tabellen vorhanden sind!“

Beispiel:

SELECT Kunden.Name, Bestellungen.Produkt
FROM Kunden
INNER JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;

Ergebnis:

Name Produkt
AnnaLaptop
AnnaMaus
ClaraTastatur

Visualisierung:

Kunden       Bestellungen  
[Anna]   ---- [Laptop]  
[Anna]   ---- [Maus]  
[Clara]  ---- [Tastatur]  
(Bert "fällt raus")  

Wann verwenden?

  • Wenn du nur Datensätze brauchst, die in beiden Tabellen vorkommen
  • Typischer Anwendungsfall: „Welche Kunden haben Bestellungen aufgegeben?“

OUTER JOIN: Auch nicht übereinstimmende Daten

Ein OUTER JOIN gibt zusätzlich auch jene Zeilen aus, die keine passende Verbindung in der jeweils anderen Tabelle haben. Das ist besonders hilfreich, wenn du auch „unvollständige“ Informationen sehen möchtest – z. B. alle Kunden, auch wenn sie keine Bestellung aufgegeben haben.

Es gibt drei Varianten:

a) LEFT JOIN – Alle Zeilen aus der linken Tabelle

Beispiel:

SELECT Kunden.Name, Bestellungen.Produkt
FROM Kunden
LEFT JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;

Ergebnis:

Name Produkt
AnnaLaptop
AnnaMaus
BertNULL
ClaraTastatur

Visualisierung:

Kunden (alle)  
[Anna]   ---- [Laptop]  
[Anna]   ---- [Maus]  
[Bert]   ---- (kein Eintrag)  
[Clara]  ---- [Tastatur]  

b) RIGHT JOIN – Alle Zeilen aus der rechten Tabelle

Beispiel:

SELECT Kunden.Name, Bestellungen.Produkt
FROM Kunden
RIGHT JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;

Angenommen, es gäbe einen zusätzlichen Eintrag mit BestellID 103 (ohne zugehörigen Kunden):

Name Produkt
AnnaLaptop
AnnaMaus
ClaraTastatur
NULLKopfhörer

c) FULL JOIN – Kombination aus LEFT und RIGHT JOIN

Beispiel:

SELECT Kunden.Name, Bestellungen.Produkt
FROM Kunden
FULL JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;

Ergebnis: Zeigt alle Kunden und alle Bestellungen – auch die ohne passende Zuordnung.

Wann verwenden?

  • LEFT JOIN: Wenn du alle Zeilen aus der linken Tabelle brauchst (z. B. „Alle Kunden anzeigen – auch ohne Bestellungen“)
  • RIGHT JOIN: Wenn du alle Einträge aus der rechten Tabelle brauchst (z. B. „Alle Bestellungen – auch ohne Kundenbezug“)
  • FULL JOIN: Wenn du nichts verlieren willst und alles sehen möchtest

CROSS JOIN – Jede Kombination (kartesisches Produkt)

Ein CROSS JOIN kombiniert jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle – unabhängig von einem gemeinsamen Schlüssel oder einer Bedingung. Das Ergebnis ist das sogenannte kartesische Produkt der beiden Tabellen.

Dieses Verhalten kann schnell zu einer großen Anzahl von Ergebnissen führen und wird daher nur in speziellen Fällen genutzt – etwa zur Generierung von Testdaten oder Kombinationslisten.

Beispiel:

SELECT Kunden.Name, Bestellungen.Produkt
FROM Kunden
CROSS JOIN Bestellungen;

Auszug aus dem Ergebnis (bei 3 Kunden und 3 Bestellungen):

Name Produkt
AnnaLaptop
AnnaMaus
AnnaTastatur
BertLaptop
BertMaus
BertTastatur
ClaraLaptop
ClaraMaus
ClaraTastatur

Visualisierung:

Kunden × Bestellungen:
Anna + Laptop, Anna + Maus, Anna + Tastatur
Bert + Laptop, Bert + Maus, Bert + Tastatur
Clara + Laptop, Clara + Maus, Clara + Tastatur

Wann nutzen?

  • Zur Erzeugung aller möglichen Kombinationen zweier Merkmalsgruppen (z. B. Farben × Größen)
  • Bei Daten- oder UI-Tests, wenn alle Kombinationsmöglichkeiten durchgespielt werden sollen
  • Nicht empfohlen für produktive JOINs mit großen Tabellen – das Ergebnis explodiert schnell

Vergleichstabelle: INNER JOIN vs. OUTER JOIN vs. CROSS JOIN

Die folgende Tabelle fasst die wichtigsten Unterschiede der JOIN-Typen übersichtlich zusammen:

JOIN-Typ Beschreibung NULL-Werte möglich? Typischer Anwendungsfall
INNER JOIN Nur übereinstimmende Zeilen aus beiden Tabellen Nur Kunden mit Bestellungen anzeigen
LEFT JOIN Alle Zeilen aus der linken Tabelle + passende aus der rechten ✅ (rechte Seite) Alle Kunden inkl. Bestellungen (auch wenn keine)
RIGHT JOIN Alle Zeilen aus der rechten Tabelle + passende aus der linken ✅ (linke Seite) Alle Bestellungen inkl. Kunden (auch wenn gelöscht)
FULL JOIN Kombination aus LEFT und RIGHT JOIN ✅ (beidseitig) Kompletter Datenabgleich beider Tabellen
CROSS JOIN Alle Kombinationen beider Tabellen (kartesisches Produkt) Alle möglichen Kombinationen erzeugen (z. B. Farben × Größen)

Die Darstellung von NULL-Werten hängt auch vom verwendeten SQL-Dialekt und der konkreten Abfrage ab.

Häufige Fehler & Tipps

Beim Arbeiten mit JOINs passieren häufig vermeidbare Fehler – vor allem, wenn man die JOIN-Logik nicht ganz verstanden hat. Hier sind die gängigsten Fallstricke und praktische Tipps:

Typische Fehler

  • Fehler #1: ON-Bedingung vergessen
    Wenn man bei einem JOIN die ON-Klausel vergisst, erzeugt das (je nach Datenbank) unbeabsichtigt einen CROSS JOIN. Das Ergebnis explodiert schnell.
  • Fehler #2: LEFT JOIN statt INNER JOIN (oder umgekehrt)
    Wer aus Gewohnheit LEFT JOIN schreibt, obwohl er nur passende Datensätze braucht, bekommt unerwartete NULL-Werte im Ergebnis.

Best Practices & Tipps

  • Tipp #1: JOINs mit kleinen Test-Tabellen ausprobieren, um das Ergebnis besser zu verstehen.
  • Tipp #2: Wenn FULL JOIN verwendet wird: sicherstellen, dass man wirklich Daten von beiden Seiten benötigt. Oft reicht ein LEFT JOIN oder RIGHT JOIN.
  • Tipp #3: Aliasse für Tabellen nutzen, um die Abfragen kürzer und lesbarer zu machen.
    Beispiel:
    SELECT k.Name, b.Produkt
    FROM Kunden AS k
    INNER JOIN Bestellungen AS b ON k.KundenID = b.KundenID;

Profi-Tipp: Wenn du JOINs häufig nutzt, lohnt es sich, das Ergebnis gezielt mit IS NULL oder IS NOT NULL zu prüfen – besonders bei LEFT/RIGHT JOINs.

Zusammenfassung

JOINs sind das Herzstück von SQL, wenn es darum geht, Daten aus mehreren Tabellen sinnvoll zu verknüpfen. Hier die Kernpunkte im Überblick:

  • INNER JOIN: Gibt nur Datensätze zurück, die in beiden Tabellen übereinstimmen. Perfekt, wenn nur vollständige Paare relevant sind.
  • OUTER JOIN (LEFT, RIGHT, FULL): Zeigt auch Datensätze, die in einer Tabelle ohne passenden Gegenpart in der anderen stehen. So gehen keine Daten verloren.
  • CROSS JOIN: Erzeugt das kartesische Produkt – jede Kombination aller Zeilen beider Tabellen. Vorsicht, bei großen Tabellen sehr umfangreich.

Mit diesem Wissen bist du bestens gerüstet, um JOINs sicher und gezielt in deinen SQL-Abfragen einzusetzen und komplexe Datenbeziehungen einfach zu verstehen.

Bonus: SQL Join Cheat Sheet

SQL JOIN - Cheat Sheet

Um dir den Einstieg und die tägliche Arbeit mit JOINs zu erleichtern, bieten wir dir ein praktisches PDF-Cheat Sheet mit einer Übersicht aller wichtigen SQL-JOIN-Typen.

Hier kannst du das SQL-Joins Cheat Sheet kostenlos herunterladen und deine SQL-Kenntnisse weiter verbessern: SQL JOIN Cheat Sheet (PDF)