Perbedaan Join SQL ( INNER, LEFT, RIGHT, FULL, SELF )

JOIN digunakan untuk menggabungkan baris dari dua atau lebih tabel berdasarkan kolom yang memiliki relasi antar tabel tersebut. Ada beberapa jenis JOIN, dan masing-masing memiliki cara kerja serta hasil yang berbeda.

INNER JOIN

Mengembalikan hanya baris yang cocok (matching) di kedua tabel.

SELECT produk.nama_produk, kategori.nama_kategori
FROM produk
INNER JOIN kategori
ON produk.id_kategori = kategori.id_kategori;

Hasil: Hanya produk yang memiliki kategori (tidak NULL) dan cocok di tabel kategori.

nama_produk nama_kategori
Laptop Lenovo Elektronik
HP Samsung Elektronik
Meja Belajar Furnitur
Kursi Kantor Furnitur

LEFT JOIN (atau LEFT OUTER JOIN)

Mengembalikan semua baris dari tabel kiri (LEFT) dan yang cocok dari tabel kanan. Jika tidak cocok, nilai dari tabel kanan akan NULL.

SELECT produk.nama_produk, kategori.nama_kategori
FROM produk
LEFT JOIN kategori
ON produk.id_kategori = kategori.id_kategori;

Hasil: Semua produk ditampilkan, termasuk yang tidak punya kategori (NULL).

nama_produk nama_kategori
Laptop Lenovo Elektronik
HP Samsung Elektronik
Meja Belajar Furnitur
Kursi Kantor Furnitur
Buku Tulis NULL

RIGHT JOIN (atau RIGHT OUTER JOIN)

Kebalikan dari LEFT JOIN. Mengembalikan semua baris dari tabel kanan (RIGHT) dan yang cocok dari tabel kiri. Jika tidak cocok, nilai dari tabel kiri akan NULL.

SELECT produk.nama_produk, kategori.nama_kategori
FROM produk
RIGHT JOIN kategori
ON produk.id_kategori = kategori.id_kategori;

Hasil: Semua kategori ditampilkan, meskipun tidak ada produk yang termasuk dalam kategori tersebut.

nama_produk nama_kategori
Laptop Lenovo Elektronik
HP Samsung Elektronik
Meja Belajar Furnitur
Kursi Kantor Furnitur
NULL Alat Tulis

FULL JOIN (atau FULL OUTER JOIN)

Mengembalikan semua baris dari kedua tabel. Jika tidak ada kecocokan, maka kolom dari tabel yang tidak cocok akan diisi dengan NULL. (tidak semua DBMS support langsung, seperti MySQL)

SELECT produk.nama_produk, kategori.nama_kategori
FROM produk
FULL OUTER JOIN kategori
ON produk.id_kategori = kategori.id_kategori;

Hasil: Semua produk dan semua kategori ditampilkan, cocok maupun tidak cocok. Kalau DBMS kamu tidak mendukung FULL OUTER JOIN, bisa disimulasikan dengan UNION antara LEFT dan RIGHT JOIN.

CROSS JOIN

Mengembalikan perkalian Cartesian dari dua tabel — setiap baris dari tabel pertama dikombinasikan dengan semua baris dari tabel kedua.

SELECT produk.nama_produk, kategori.nama_kategori
FROM produk
CROSS JOIN kategori;

Hasil: Kombinasi semua produk dengan semua kategori (tanpa syarat), contoh 5 produk × 2 kategori = 15 baris.

nama_produk nama_kategori
Laptop Lenovo Elektronik
Laptop Lenovo Furnitur
HP Samsung Elektronik
HP Samsung Furnitur
Meja Belajar Elektronik
Meja Belajar Furnitur

SELF JOIN

JOIN pada tabel itu sendiri, berguna jika data memiliki hubungan hierarkis.

SELECT 
  parent.nama_produk AS produk_utama,
  child.nama_produk AS sub_produk
FROM 
  produk AS parent
JOIN 
  produk AS child
ON 
  parent.id_produk = child.id_parent;

📌 Hasil: menampilkan daftar produk utama bersama dengan produk turunannya (jika ada)

produk_utama sub_produk
Laptop Lenovo Charger Lenovo
Laptop Lenovo Mouse Lenovo
HP Samsung Case Samsung

Lalu sering juga kita temui penggunaan query hanya JOIN saja (tanpa kata tambahan) Ini default-nya adalah INNER JOIN.

OUTER JOIN adalah istilah umum untuk gabungan LEFT, RIGHT, dan FULL:

  • LEFT OUTER JOIN → Sama dengan LEFT JOIN
  • RIGHT OUTER JOIN → Sama dengan RIGHT JOIN
  • FULL OUTER JOIN → Gabungan lengkap dari keduanya