Ver Mensaje Individual
  #21 (permalink)  
Antiguo 28/08/2014, 08:32
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: consultas con relaciones many-to-many ?

Cita:
Y veo que en ocasiones usáis
"FROM xxx JOIN yyy WHERE"
y a veces simplemente
"FROM xxx, yyy WHERE"
¿Qué ventaja tiene usar el JOIN?, ¿No es suficiente usar la separación por comas?
Entiendo que el JOIN me va a filtrar eliminando cosas pero así me parece más lioso que poniendo la condición en el Where o en el ON.
La coma es un JOIN implícito, que en algunos DBMS tiene como exigencia que los campos a relacionar tengan exactamente el mismo nombre en ambas tablas. El problema es que en ocasiones los programadores se olvidan de eso, y usan nombres iguales para datos diferentes, lo que termina generando resultados falsos.
Otra consecuencia es que si no hay campos del mismo nombre se producen productos cartesianos, lo que es un espanto para la performance.
Normalmente cuando se usa coma se indica la relación en el WHERE, pero en muchos DBMS el WHERE se procesa luego de leer las tablas basados en el JOIN implícito, lo que termina haciendo que se lea un conjunto de datos muy grande antes de tomar sólo lo que el WHERE determine.

El uso de JOIN / INNER JOIN, es lo que se denomina JOIN explícito y requiere para funcionar bien la cláusula ON, donde se indica la relación de las tablas
Código SQL:
Ver original
  1. SELECT a, b, c, d
  2. FROM tabla1 T1 INNER JOIN tabla2 T2 ON T1.a_id = T2.a_id
En la mayoría de los DBMS, esa forma hace que el primer filtrado se realice a medida que los datos se leen, y antes de aplicar el WHERE, por lo que en realidad sólo lee los datos realmente útiles.
Es más eficiente en performance.

Todos los DBMS aceptan ambas formas (excepto algunas versiones viejas de Oracle), y la maoría de los tutoriales usan la coma porque toman sintaxis viejas y obsoletas, no por ser técnicamente inexactas.
Pero si quieres consultas eficiente, no uses coma. Usa JOINs explícitos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)