Tautan Joe adalah titik awal yang baik. Quassnoi juga membahas ini.
Secara umum, jika bidang Anda diindeks dengan benar, ATAU jika Anda ingin memfilter lebih banyak catatan (yaitu memiliki banyak baris EXIST di subquery) NOT EXISTS akan berkinerja lebih baik.
EXIST dan NOT EXISTS keduanya hubung singkat - segera setelah catatan cocok dengan kriteria itu akan disertakan atau disaring dan pengoptimal pindah ke catatan berikutnya.
LEFT JOIN akan bergabung dengan SEMUA REKAM terlepas dari apakah mereka cocok atau tidak, lalu saring semua catatan yang tidak cocok. Jika tabel Anda besar dan/atau Anda memiliki beberapa JOIN kriteria, ini bisa sangat sangat intensif sumber daya.
Saya biasanya mencoba menggunakan NOT EXISTS dan EXIST jika memungkinkan. Untuk SQL Server, IN dan NOT IN secara semantik setara dan mungkin lebih mudah untuk ditulis. Ini adalah satu-satunya operator yang akan Anda temukan di SQL Server yang dijamin korsleting.