¿Usando la notación ANSI para joins, es lo mismo agregar condiciónes adicionales al where que en la cláusula ON?
Si no se entendió la pregunta, pongamos un ejemplo...
¿Son estas dos consultas equivalentes?
SELECT d.departamento_id, e.nombrePensemos esto, si usáramos el viejo estilo de join (la sintaxis ANSI apareció en 9i), tendríamos todas las condiciones juntas, sin orden específico ni marca especial del tipo "esta condición es de join".
FROM (departamento d INNER JOIN empleado e
ON d.departamento_id = e.departamento_id)
WHERE d.seccion_id = e.seccion;
SELECT d.departamento_id, e.nombre
FROM (departamento d INNER JOIN empleado e
ON d.departamento_id = e.departamento_id
AND d.seccion_id = e.seccion);
Sucede que luego que Oracle parsea la consulta, analiza todas las condiciones que haya encontrado y según lo que tiene sobre la mesa decide cuál aplicar primero. El hecho de que nosotros incluyamos una condición en el ON o en el where, no va a ser un factor decisivo sino una diferencia documental que aporta claridad. Hagamos sino la prueba de dejar una de las cláusulas de un join compuesto fuera del ON, y colocarla en el where.... el resultado va a ser el mismo!
Si alguien quiere pruebas experimentales concretas podrá comparar los planes de ejecución y notar que internamente es exactamente lo mismo.
No hay comentarios:
Publicar un comentario