Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Diferencia entre JOIN y ...WHERE t1.valor = t2.valor

Estas en el tema de Diferencia entre JOIN y ...WHERE t1.valor = t2.valor en el foro de Bases de Datos General en Foros del Web. Buenas, estoy trabajando bastante con bases de datos y me surgió la siguiente duda. Varias veces he escuchado que un join es lo siguiente: "SELECT ...
  #1 (permalink)  
Antiguo 26/11/2009, 17:02
 
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 9 meses
Puntos: 0
Diferencia entre JOIN y ...WHERE t1.valor = t2.valor

Buenas, estoy trabajando bastante con bases de datos y me surgió la siguiente duda.
Varias veces he escuchado que un join es lo siguiente:
"SELECT codigo FROM tabla1 AS t1, codigo FROM tabla2 AS t2 WHERE t1.codigo = t2.codigo".

Me pregunto cuál es la diferencia entre esto y un LEFT JOIN ,RIGHT JOIN o cualquier tipo de JOIN?

Desde ya, gracias.

Saludos!
  #2 (permalink)  
Antiguo 26/11/2009, 17:34
Avatar de 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
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)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:31.