No hay un tipo de unión "mejor" o "peor". Tienen un significado diferente y deben usarse dependiendo de ello.
En su caso, es probable que no tiene empleados sin work_log (no hay filas de esa tabla), por lo que LEFT JOIN
y JOIN
será equivalente en los resultados. Sin embargo, si tuviera tal cosa (un nuevo empleado sin registro de trabajo registrado), un usuario omitiría a JOIN
ese empleado, mientras que una combinación izquierda (cuya primera tabla es empleados) los mostraría a todos, y nulos en los campos de work_log si hubiera No son partidos.
Nuevamente, el rendimiento es una cosa secundaria para la corrección de la consulta. Algunas personas dicen que no deberías usar LEFT JOIN
s. Es cierto que una IZQUIERDA IZQUIERDA obliga al optimizador a ejecutar la consulta en un orden particular, evitando algunas optimizaciones (reordenamiento de tablas) en algunos casos. Aquí hay un ejemplo . Pero no debe elegir uno sobre el otro si se sacrifica la corrección / significado, ya que una UNIÓN INTERNA no es inherentemente peor. El resto de las optimizaciones habituales se aplican como de costumbre.
En resumen, no lo use LEFT JOIN
si realmente quiere decir INNER JOIN
.
En MySQL CROSS JOIN
, INNER JOIN
y JOIN
son lo mismo. En el estándar, y semánticamente, a CROSS JOIN
es un INNER JOIN
sin ON
cláusula, por lo que obtiene todas las combinaciones de filas entre tablas.
Tienes ejemplos de todos los tipos semánticos de unión en Wikipedia . En la práctica, en MySQL, tendemos a escribir solo JOIN
y LEFT JOIN
.