Ver Mensaje Individual
  #2 (permalink)  
Antiguo 26/11/2009, 17:34
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 1 mes
Puntos: 2658
Respuesta: Diferencia entre JOIN y ...WHERE t1.valor = t2.valor

El funcionamiento interno en el motor de la base de datos es diferente, tanto en lo que se refiere al plan de consulta, como en el uso de índices.
La forma WHERE t1.codigo = t2.codigo es totalmente desaconsejable, ya que los DBMS no la pueden optimizar fuera del uso de índices, en cambio el uso de la fomra
Código SQL:
Ver original
  1. SELECT * FROM tabla1 [LEFT|RIGHT|INNER] JOIN TABLA2 ON TABLA1.codigo = TABLA2.codigo;
si puede ser realizado utilizando más recursos.
Esencialmente, cuando usas el WHERE, el DBMS no sabe a priori cuántas coincidencias habrá, salvo que el campo relacionado sea de cardinalidad 1:1, o existan índices definidos en esos campos (Ver caso SQL Server); en todo el resto de los casos deberá realizar una comparación tal que puede implicar leer más de la mitad de las tablas, con lo que directamente descarta los índices y pasa a leer todo... con una gran pérdida de recursos.
En cambio, el uso de FORM ... [LEFT|RIGHT|INNER] JOIN ..., permite realizar una lectura por varios métodoscuya implementación varía de acuerdo a la lógica del DBMS, y de las estadísticas realizadas (estas son parte del corazón de los DBMS). En cualquiera de ellos, los resultados reportan un costo de consulta menor con los JOIN que con el WHERE.

Aquí tienes un tutorial que hace una explicación bastante buena del funcionamiento del JOIN en las consultas: Consultas combinadas. JOINS

En cuanto a MySQL: 7.2.9. Cómo optimiza MySQL los LEFT JOIN y RIGHT JOIN
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)