Perbedaannya adalah ketika Anda menggunakan exists
- kueri di dalam biasanya bergantung pada kueri utama (berarti menggunakan kolom darinya sehingga tidak dapat dijalankan secara terpisah) dan, jadi, untuk setiap baris kueri utama, ia memeriksa apakah beberapa data yang diambil oleh subkueri ada atau tidak.
Masalah kueri pertama Anda adalah bahwa subquery di dalam blok yang ada tidak bergantung pada kolom kueri utama, ini adalah kueri terpisah yang selalu mengembalikan baris dengan 1
, jadi, untuk setiap baris kueri utama, hasil exists
akan selalu true
. Jadi, kueri pertama Anda setara dengan
SELECT distinct(company_id)
FROM user
WHERE user.user_id = 123
AND user.company_id IS NOT NULL
Lihat juga biola