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