Het Verschil Tussen JOIN, INNER JOIN en LEFT JOIN in SQL

SQL-query’s kunnen soms een beetje ingewikkeld lijken, vooral als je met meerdere tabellen werkt. Maar geen zorgen, we leggen het simpel uit!

Stel je voor dat je twee tabellen hebt: klanten en bestellingen.

  • Klanten heeft informatie over klanten, zoals naam en klantnummer.
  • Bestellingen heeft informatie over de bestellingen die klanten hebben geplaatst, zoals bestelnummer en datum.

De uitdaging is om de informatie uit deze twee tabellen te combineren en te begrijpen wie wat heeft besteld.

Hier komen de JOIN, INNER JOIN en LEFT JOIN in beeld! Laten we ze één voor één uitleggen.


1. JOIN (of INNER JOIN)

Een JOIN (vaak een INNER JOIN genoemd) haalt alleen de gegevens op waar er een overeenkomst is tussen de twee tabellen. Dit betekent dat je alleen de klanten ziet die ook bestellingen hebben geplaatst.

Voorbeeld:

Tabel Klanten:

klant_idnaam
1Jan
2Anna
3Peter

Tabel Bestellingen:

bestel_idklant_idbestel_datum
10112025-06-01
10222025-06-02

Als je een query schrijft om de naam van klanten en hun besteldatum te zien, krijg je het volgende resultaat:

SELECT klanten.naam, bestellingen.bestel_datum
FROM klanten
INNER JOIN bestellingen
ON klanten.klant_id = bestellingen.klant_id;

Resultaat:

naambestel_datum
Jan2025-06-01
Anna2025-06-02

Let op: Peter komt niet in het resultaat voor omdat hij geen bestelling heeft geplaatst.


2. LEFT JOIN (of LEFT OUTER JOIN)

Een LEFT JOIN haalt alle rijen uit de linker tabel (in ons geval de klanten) en de bijbehorende rijen uit de rechter tabel (de bestellingen). Als er geen overeenkomende rij in de rechter tabel is, krijg je NULL voor de kolommen van de rechter tabel.

Voorbeeld:

Als je dezelfde query uitvoert, maar nu met een LEFT JOIN, krijg je ook alle klanten te zien, zelfs de klanten die geen bestelling hebben geplaatst:

SELECT klanten.naam, bestellingen.bestel_datum
FROM klanten
LEFT JOIN bestellingen
ON klanten.klant_id = bestellingen.klant_id;

Resultaat:

naambestel_datum
Jan2025-06-01
Anna2025-06-02
PeterNULL

Peter komt nu wel in het resultaat voor, maar met een NULL voor de bestel_datum, omdat hij geen bestelling heeft geplaatst.


Samenvatting van het Verschil

  • INNER JOIN: Laat alleen de klanten zien die ook bestellingen hebben geplaatst. Als er geen bestelling is, krijg je de klant niet te zien.
  • LEFT JOIN: Laat alle klanten zien, zelfs als ze geen bestelling hebben geplaatst. Als een klant geen bestelling heeft, krijg je NULL voor de bestelgegevens.

Wanneer Gebruik je Wat?

  • INNER JOIN: Als je alleen geïnteresseerd bent in klanten die echt iets hebben besteld.
  • LEFT JOIN: Als je alle klanten wilt zien, zelfs als ze geen bestelling hebben geplaatst.

Hopelijk maakt dit het verschil duidelijker! Het komt eigenlijk neer op de vraag: wil ik alleen klanten zien die ook daadwerkelijk iets hebben besteld (INNER JOIN) of wil ik alle klanten zien, zelfs als ze niets hebben gekocht (LEFT JOIN)?