Un saludo y feliz año a todos.
Hoy me ha asaltado una duda al hacer una consulta. Supongamos que tengo dos tablas t1 y t2, la primera bastante mayor que la segunda y que están relacionadas con una clave (pongamos que se llama k en ambas tablas):
SELECT *
FROM
t1 LEFT JOIN t2 ON t1.k=t2.k;
Hasta aquí, claro. Ahora supongamos que sólo nos interesan los registros de t1 que cumplen que su campo v es igual a valor:
SELECT *
FROM
t1 LEFT JOIN t2 ON t1.k=t2.k
WHERE t1.v='valor';
Mi pregunta es: ¿los SGBD hacen primero la composición y luego recurren al WHERE o desechan primero registros en las tablas para que la composición sea más pequeña? Porque si primero componen es más rápido:
SELECT *
FROM
(SELECT * FROM t1 WHERE t1.v='valor') t1 LEFT JOIN t2 ON t1.k=t2.k;
O sea, hacer una subselect.