Asumsi Anda salah; subquery akan dieksekusi hanya sekali. Alasan mengapa lebih lambat daripada bergabung adalah karena IN tidak dapat memanfaatkan indeks; ia harus memindai argumennya sekali untuk setiap kali WHERE klausa dievaluasi, yaitu, sekali per baris dalam tabelA. Anda dapat mengoptimalkan kueri, tanpa menggunakan variabel atau prosedur tersimpan, cukup dengan mengganti IN dengan bergabung, jadi:
SELECT tableA.field1, tableA.field2, [...]
FROM tableA
INNER JOIN tableB ON tableA.id = tableB.id
Kecuali Anda tidak keberatan mendapatkan kembali setiap bidang dari kedua tabel, Anda perlu menghitung bidang yang Anda inginkan di SELECT ayat; tableA.* , misalnya, akan menimbulkan kesalahan sintaks.