Setiap kueri yang melibatkan lebih dari satu tabel memerlukan beberapa bentuk asosiasi untuk menautkan hasil dari tabel "A" ke tabel "B". Cara tradisional (ANSI-89) untuk melakukan ini adalah:
- Daftar tabel yang terlibat dalam daftar yang dipisahkan koma dalam klausa FROM
-
Tulis asosiasi antar tabel dalam klausa WHERE
SELECT * FROM TABLE_A a, TABLE_B b WHERE a.id = b.id
Berikut kueri yang ditulis ulang menggunakan sintaks ANSI-92 JOIN:
SELECT *
FROM TABLE_A a
JOIN TABLE_B b ON b.id = a.id
Dari Perspektif Kinerja:
Jika didukung (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), tidak ada manfaat kinerja untuk menggunakan salah satu sintaks di atas yang lain. Pengoptimal melihatnya sebagai kueri yang sama. Tetapi kueri yang lebih kompleks dapat memanfaatkan sintaks ANSI-92:
- Kemampuan untuk mengontrol JOIN order - urutan tabel yang dipindai
- Kemampuan untuk menerapkan kriteria filter pada tabel sebelum bergabung
Dari Perspektif Pemeliharaan:
Ada banyak alasan untuk menggunakan sintaks ANSI-92 JOIN daripada ANSI-89:
- Lebih mudah dibaca, karena kriteria GABUNG terpisah dari klausa WHERE
- Kemungkinan kecil untuk melewatkan kriteria GABUNG
- Dukungan sintaks yang konsisten untuk tipe JOIN selain INNER, membuat kueri mudah digunakan di database lain
- klausa WHERE hanya berfungsi sebagai penyaringan produk kartesius dari tabel yang digabungkan
Dari Perspektif Desain:
Sintaks ANSI-92 JOIN adalah pola, bukan anti-pola:
- Tujuan kueri lebih jelas; kolom yang digunakan aplikasi jelas
- Ini mengikuti aturan modularitas tentang penggunaan pengetikan yang ketat bila memungkinkan. Eksplisit hampir secara universal lebih baik.
Kesimpulan
Karena keakraban dan/atau kenyamanan, saya tidak melihat manfaat apa pun untuk terus menggunakan klausa ANSI-89 WHERE alih-alih sintaks ANSI-92 JOIN. Beberapa mungkin mengeluh bahwa sintaks ANSI-92 lebih bertele-tele, tapi itulah yang membuatnya eksplisit. Semakin eksplisit, semakin mudah untuk dipahami dan dipelihara.