0Pricing
SQL Interview Prep · Lección

Elegir el tipo de join adecuado

Aplique un marco de decisión para elegir el join correcto a partir de un enunciado

Elegir el tipo de join adecuado es una lección gratuita de SQL Interview Prep en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Interview Prep incluye 4 lecciones en total.

Elegir el JOIN a partir de un problema descrito

La habilidad más valiosa relacionada con los joins en una entrevista no es la sintaxis, sino traducir un requisito expresado en lenguaje sencillo al tipo de join correcto. La mayoría de los candidatos sabe cómo funciona cada join, pero se bloquea cuando debe elegir uno bajo presión.

Esta lección le ofrece un marco de decisión repetible para que pueda indicar el join correcto en cuestión de segundos.

La pregunta clave: ¿qué filas deben conservarse?

Toda elección de un join se reduce a una pregunta: ¿qué filas no coincidentes de cada lado necesita conservar?

  • Conservar solo las filas coincidentes de ambos lados: INNER JOIN.
  • Conservar todas las filas de la izquierda, coincidan o no: LEFT JOIN.
  • Conservar todas las filas de ambos lados: FULL OUTER JOIN.
  • Conservar todas las combinaciones: CROSS JOIN.

Decida primero qué debe conservarse; el tipo de join se deduce automáticamente.

Palabras clave de INNER JOIN

Expresiones como «clientes que hicieron un pedido», «productos que tienen reseñas» u «órdenes junto con su cliente» implican que debe existir una coincidencia en ambos lados. Se trata de un INNER JOIN.

Si descartar las filas no coincidentes es aceptable o deseable, el inner join es la opción predeterminada y la más eficiente.

SELECT c.name, o.order_id
FROM customers c
JOIN orders o ON o.customer_id = c.id;

Palabras clave de LEFT JOIN

Expresiones como «todos los clientes, incluidos los que no tienen pedidos» o «listar cada producto y el número de sus reseñas (cero si no tiene ninguna)» significan que debe conservar la tabla de la izquierda independientemente de las coincidencias. Se trata de un LEFT JOIN.

Las palabras reveladoras son «todos», «incluidos los que no tienen» y «aunque no haya ninguno».

SELECT c.name, COUNT(o.order_id) AS orders
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.id, c.name;

Palabras clave del anti-join

Expresiones como «clientes que nunca han hecho un pedido», «productos sin ventas» o «empleados sin gerente» solicitan las filas que no tienen ninguna coincidencia. Este es el anti-join: LEFT JOIN más WHERE right_key IS NULL (o NOT EXISTS).

Las palabras clave son «nunca», «ninguno» o «sin».

SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.order_id IS NULL;

Palabras clave de FULL OUTER JOIN

Expresiones como «conciliar dos listas y mostrar las entradas que faltan en cualquiera de los lados» o «comparar las cuentas del mes pasado con las de este mes, marcando tanto las nuevas como las que desaparecieron» requieren conservar las filas no coincidentes de ambas tablas. Se trata de un FULL OUTER JOIN.

Los problemas de conciliación y comparación de diferencias son los casos típicos que lo indican.

SELECT a.id, b.id
FROM last_month a
FULL OUTER JOIN this_month b ON a.id = b.id
WHERE a.id IS NULL OR b.id IS NULL;

Palabras clave de CROSS JOIN

Expresiones como «cada talla en cada color», «una fila por tienda y día, incluso cuando no hubo ventas» o «todas las combinaciones posibles» apuntan a un CROSS JOIN.

La señal es «cada... en cada...» o «todas las combinaciones», cuando no existe ninguna condición de coincidencia entre los dos conjuntos.

SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;

Palabras clave de SELF JOIN

Las expresiones que relacionan una fila con otra fila de la misma tabla, como «cada empleado y su gerente», «pares de usuarios de la misma ciudad» o «encontrar correos electrónicos duplicados», indican un self join.

La clave es que una entidad hace referencia a otra del mismo tipo o se compara con ella.

SELECT e.name, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

Un ejemplo resuelto

Enunciado: «Mostrar cada producto y cuántas veces se pidió el mes pasado, incluidos los productos que nunca se pidieron».

Interprételo: «cada producto» más «incluidos los que nunca se pidieron» significa que deben conservarse todas las filas de productos, por lo que debe hacer un LEFT JOIN de productos con pedidos y, después, contar el lado de los pedidos con COUNT (que es 0 para los productos no coincidentes porque COUNT ignora los valores NULL).

SELECT p.name, COUNT(o.order_id) AS times_ordered
FROM products p
LEFT JOIN orders o
  ON o.product_id = p.id
 AND o.order_date >= DATE '2024-05-01'
GROUP BY p.id, p.name;

Una trampa habitual: filtro en ON frente a WHERE

En la consulta anterior, el filtro de fecha está en la cláusula ON, no en WHERE. Así se conservan los productos que tienen cero pedidos que cumplen los criterios.

Si trasladara order_date >= ... a WHERE, descartaría las filas NULL de los productos no coincidentes y convertiría silenciosamente el LEFT JOIN en un INNER JOIN, eliminando precisamente los productos que el enunciado pedía conservar.

-- WRONG: WHERE on the outer table removes unmatched products
-- ...
-- LEFT JOIN orders o ON o.product_id = p.id
-- WHERE o.order_date >= '2024-05-01'  <-- becomes an inner join

El marco de decisión

Analice cualquier problema de joins con este listado:

  • ¿La misma tabla se relaciona consigo misma? -> SELF JOIN (y considere una CTE recursiva si la profundidad no está limitada).
  • ¿Todas las combinaciones, sin condición? -> CROSS JOIN.
  • ¿Solo las filas coincidentes? -> INNER JOIN.
  • ¿Conservar todas las filas de un lado? -> LEFT JOIN.
  • ¿Conservar las no coincidentes de ambos lados? -> FULL OUTER JOIN.
  • ¿Filas sin coincidencia? -> anti-join (LEFT JOIN + IS NULL).

Comprobación rápida

Aplique el marco de decisión a un problema descrito en lenguaje sencillo.

Resumen: elegir el tipo de join correcto

Aspectos clave:

  • Empiece cada decisión sobre un join preguntándose qué filas no coincidentes deben conservarse.
  • Asocie las palabras clave: «todos/incluidos» -> LEFT, «nunca/ninguno» -> anti-join, «cada... en cada...» -> CROSS, «cada X y su X» -> SELF, conciliación -> FULL OUTER.
  • Mantenga los filtros de los joins externos en la cláusula ON; un filtro en WHERE puede convertir silenciosamente un LEFT JOIN en un INNER JOIN.
  • Explique el marco en las entrevistas; eso demuestra razonamiento, no memorización.

Preguntas frecuentes

¿La lección «Elegir el tipo de join adecuado» es gratis?

Sí — el texto completo de «Elegir el tipo de join adecuado» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Interview Prep, actualiza a CoddyKit PRO. El curso de SQL Interview Prep incluye 4 lecciones en total.

¿Qué aprenderé en «Elegir el tipo de join adecuado»?

Aplique un marco de decisión para elegir el join correcto a partir de un enunciado Practicas SQL Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Interview Prep?

No se requiere experiencia previa. SQL Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Elegir el tipo de join adecuado»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Interview Prep?

Sí. Cada lección de SQL Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. CROSS JOIN y productos cartesianos
  2. SELF JOIN para jerarquías
  3. Comparar filas dentro de una tabla
  4. Elegir el tipo de join adecuado
← Volver a SQL Interview Prep