Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/09/2008, 08:29
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Hay alguna diferencia entre = o join??

No notarás la diferencia si la consulta opera sobre tablas reducidas, pero a medida que las tablas crecen descubrirás que la performance baja.

Piensa esto: Si se molestaron en crear un algoritmo para hacer el JOIN, entonces el mismo no debe operar de la misma forma que un "=". ¿No te parece?

El tema, en principio, es que el "=" implica que el motor debe levantar todos los registros de las tablas implicadas porque a priori no sabe cuáles son los que se relacionarán. Luego va haciendo el barrido de a uno por vez entre cada registro de la primera tabla con cada registro de la segunda tabla (y lo mismo si hay más tablas)... Imagínate el tiempo usado para eso. Ese proceso es lo que se denomina producto cartesiano y es el peor escenario posible en una consulta.
El JOIN, por su parte, va comparando los valores de la segunda tabla con los de la primera solamente con los campos implicados en el ON, y únicamente lee los registros si hay coincidencia en ese campo. Sino, los ignora. El método es mucho más eficiente porque no lee registros inútiles. De hecho, si hay índices definidos sobre los campos del ON, el JOIN cruza la primera tabla con el índice, no con la tabla, y lee los registros coincidentes o no lee ninguno si los datos que busca están todos en el índice.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)