Jika Anda berpikir bahwa implementasi LEFT JOIN adalah INNER JOIN + lebih banyak pekerjaan, maka hasil ini membingungkan. Bagaimana jika implementasi INNER JOIN adalah (LEFT JOIN + filtering)? Ah, sudah jelas sekarang.
Dalam rencana kueri, satu-satunya perbedaan adalah ini:pengguna... ekstra:menggunakan di mana . Ini berarti penyaringan. Ada langkah pemfilteran ekstra dalam kueri dengan gabungan dalam.
Ini adalah jenis pemfilteran yang berbeda dari yang biasanya digunakan dalam klausa where. Sangat mudah untuk membuat indeks di A untuk mendukung tindakan pemfilteran ini.
SELECT *
FROM A
WHERE A.ID = 3
Pertimbangkan kueri ini:
SELECT *
FROM A
LEFT JOIN B
ON A.ID = B.ID
WHERE B.ID is not null
Query ini setara dengan inner join. Tidak ada indeks pada B yang akan membantu tindakan penyaringan itu. Alasannya adalah klausa where menyatakan kondisi pada hasil gabungan, bukan kondisi pada B.