Mi pregunta es similar a esta SQL order of operations pero con un pequeño giro, por lo que creo que es justo preguntar.WHERE y JOIN orden de operación
Estoy usando Teradata. Y tengo 2 tablas: table1
, table2
.
table1
tiene solo una columna id
.
table2
tiene las siguientes columnas: id
, val
Puedo estar equivocado, pero creo que estas dos afirmaciones dan los mismos resultados.
Declaración 1.
SELECT table1.id, table2.val
FROM table1
INNER JOIN table2
ON table1.id = table2.id
WHERE table2.val<100
Declaración 2.
SELECT table1.id, table3.val
FROM table1
INNER JOIN (
SELECT *
FROM table2
WHERE val<100
) table3
ON table1.id=table3.id
Mi pregunta es, ¿el optimizador de consultas de ser lo suficientemente inteligente para
- ejecutar la cláusula WHERE primero y luego unirse más adelante en la Declaración 1
- sepa que la tabla 3 no es realmente necesaria en la declaración 2
Soy bastante nuevo en SQL, así que por favor edúcame si no estoy entendiendo nada.
Hubiera pensado que el optimizador de consultas presentaría el mismo plan para ambos. Sin embargo, intente ejecutar el plan 'EXPLAIN' para verificar. –