ProgramaciónDesarrollador Backend

Explique la diferencia entre INNER JOIN y OUTER JOIN (LEFT, RIGHT, FULL OUTER JOIN) en SQL, y cómo elegir el tipo de unión adecuado en diferentes escenarios de trabajo con datos. Proporcione un ejemplo de uso correcto de cada tipo de JOIN.

Supere entrevistas con el asistente de IA Hintsage

Respuesta

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.

  • LEFT OUTER JOIN: todas las filas de la tabla izquierda + coincidencias de la tabla derecha, si las hay (de lo contrario, NULL).
  • RIGHT OUTER JOIN: todas las filas de la tabla derecha + coincidencias de la tabla izquierda, si las hay (de lo contrario, NULL).
  • FULL OUTER JOIN: todas las filas de ambas tablas, donde no hay coincidencia — valores opuestos NULL.

Cuándo usar qué JOIN:

  • Usa INNER JOIN si solo necesitas filas coincidentes.
  • LEFT JOIN — si todas las filas de la primera (izquierda) tabla son importantes independientemente de la existencia de coincidencias.
  • RIGHT JOIN — de manera similar, pero para la tabla derecha.
  • FULL OUTER JOIN — lista combinada completa (útil para buscar no coincidencias).

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;

Pregunta engañosa

¿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

Ejemplos de errores reales debido al desconocimiento de los matices del tema


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.