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 originalSELECT a, b, c, d
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.