Tampak bagi saya bahwa Anda dapat melakukan hal yang sama dalam query SQL menggunakan BUKAN ADA, BUKAN DALAM, atau KIRI BERGABUNG DI MANA NULL. Sebagai contoh:
SELECT a FROM table1 WHERE a NOT IN (SELECT a FROM table2)
SELECT a FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.a = table2.a)
SELECT a FROM table1 LEFT JOIN table2 ON table1.a = table2.a WHERE table1.a IS NULL
Saya tidak yakin apakah saya sudah mendapatkan semua sintaks yang benar, tetapi ini adalah teknik umum yang saya lihat. Mengapa saya memilih untuk menggunakan salah satu dari yang lain? Apakah kinerjanya berbeda ...? Yang mana yang paling cepat / paling efisien? (Jika itu tergantung pada implementasi, kapan saya akan menggunakan masing-masing?)
EXISTSklausa. Anda dapat kembali *, NULLatau apa pun: semua ini akan dioptimalkan jauh.
SELECTdan FROM. Dan *hanya lebih mudah untuk mengetik. Ya, SQLmemang memiliki kemiripan dengan bahasa alami, tetapi diurai dan dieksekusi oleh mesin, mesin yang diprogram. Bukannya itu akan tiba-tiba menerobos masuk ke dalam bilik Anda dan berteriak "berhenti menuntut bidang tambahan dalam EXISTSkueri karena saya muak mengurai mereka dan kemudian membuangnya!". Tidak apa-apa dengan komputer, sungguh.