EXISTS
digunakan untuk mengembalikan nilai boolean, JOIN
mengembalikan seluruh tabel lainnya
EXISTS
hanya digunakan untuk menguji apakah subquery mengembalikan hasil, dan korsleting segera setelah itu terjadi. JOIN
digunakan untuk memperluas kumpulan hasil dengan menggabungkannya dengan bidang tambahan dari tabel lain yang memiliki relasi.
Dalam contoh Anda, kueri secara semantik setara.
Secara umum, gunakan EXISTS
ketika:
- Anda tidak perlu mengembalikan data dari tabel terkait
- Anda memiliki penipuan di tabel terkait (
JOIN
dapat menyebabkan baris duplikat jika nilai diulang) - Anda ingin memeriksa keberadaan (gunakan alih-alih
LEFT OUTER JOIN...NULL
kondisi)
Jika Anda memiliki indeks yang tepat, sebagian besar waktu EXISTS
akan tampil identik dengan JOIN
. Pengecualian adalah pada subkueri yang sangat rumit, di mana biasanya lebih cepat menggunakan EXISTS
.
Jika Anda JOIN
kunci tidak diindeks, mungkin lebih cepat menggunakan EXISTS
tetapi Anda perlu menguji keadaan khusus Anda.
JOIN
sintaks juga lebih mudah dibaca dan lebih jelas secara normal.