Tu suposición es falsa; la subconsulta se ejecutará una sola vez. La razón por la que es más lento que una unión es porque IN
no puede aprovechar los índices; tiene que escanear sus argumentos una vez por cada vez que WHERE
se evalúa la cláusula, es decir, una vez por fila en la tabla A. Puede optimizar la consulta, sin usar variables o procedimientos almacenados, simplemente reemplazando el IN
con una combinación, por lo tanto:
SELECT tableA.field1, tableA.field2, [...]
FROM tableA
INNER JOIN tableB ON tableA.id = tableB.id
A menos que no le importe recuperar todos los campos de ambas tablas, debe enumerar los campos que desea en SELECT
cláusula; tableA.*
, por ejemplo, provocará un error de sintaxis.