INNER JOIN devuelve solo aquellos registros para los cuales se encontró una coincidencia en ambas tablas unidas según la condición especificada. Al usar OUTER JOIN (LEFT, RIGHT, FULL), el resultado contiene todas las filas de una o ambas tablas, incluso si no hay coincidencia en la otra tabla.
Cuándo usar qué JOIN:
Ejemplos:
-- INNER JOIN SELECT u.id, u.name, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id; -- LEFT OUTER JOIN SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id; -- FULL OUTER JOIN SELECT u.id, o.order_id FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
¿Qué resultado dará LEFT JOIN si la tabla derecha está vacía?
A menudo responden: "LEFT JOIN devolverá un resultado vacío, ya que no hay coincidencias". Correcto: LEFT JOIN en cualquier caso devolverá todas las filas de la tabla izquierda, y las columnas de la derecha serán NULL.
Ejemplo:
-- La tabla de usuarios tiene registros, orders está vacía SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id=o.user_id; -- Resultado: todos los usuarios, o.amount = NULL
Historia
Proyecto de análisis de ventas. Para mostrar la lista completa de clientes y sus pedidos se utilizó INNER JOIN, omitiendo a los clientes que no tenían pedidos. En el informe se perdieron clientes "importantes" debido a su ausencia en la tabla derecha. Solución: usar LEFT JOIN.
Historia
Plataforma de gestión de empleados y departamentos. El uso de RIGHT JOIN en lugar de LEFT JOIN llevó a confusiones al agregar nuevos departamentos: algunos empleados dejaron de aparecer en el informe. La razón — se confundió el orden de las uniones.
Historia
Migración de esquema de datos. Después de los cambios, uno de los JOIN se convirtió en CROSS JOIN debido a un error tipográfico en la condición de unión. Resultado — un aumento abrupto en el volumen de datos y "inflación" de datos. Conclusión: siempre especificar ON en las uniones y revisar cuidadosamente el tipo de JOIN.