certmundo.
es‑mx

6 min de lectura

¿Cómo combinar tablas con JOIN en SQL?

JOIN es la instrucción de SQL que une dos o más tablas para que puedas consultar información relacionada en una sola línea de resultado.

El problema que resuelve JOIN

Imagina que trabajas en el área de datos de Liverpool. Tienes una tabla con pedidos y otra tabla con información de clientes. Si quieres saber qué cliente hizo cada pedido, necesitas unir ambas tablas. Sin JOIN, tendrías que hacer dos consultas separadas y unir la información tú mismo. Con JOIN, lo haces en una sola consulta.

Eso es exactamente lo que ocurre en cualquier empresa real. Las bases de datos están divididas en muchas tablas pequeñas para evitar duplicar información. JOIN es la herramienta que las vuelve a conectar cuando necesitas una respuesta.

El Sistema de Llaves: cómo se conectan las tablas

Antes de escribir un JOIN, necesitas entender cómo se relacionan las tablas. Cada tabla tiene una columna que la identifica de forma única. A esa columna se le llama llave primaria (primary key).

Cuando esa misma columna aparece en otra tabla para crear la relación, se llama llave foránea (foreign key).

Por ejemplo:

  • La tabla clientes tiene una columna id_cliente (llave primaria).
  • La tabla pedidos tiene una columna id_cliente (llave foránea) que apunta al cliente que hizo ese pedido.

JOIN une las dos tablas usando esas dos columnas como punto de conexión.

Las dos tablas de ejemplo

Vamos a trabajar con dos tablas inspiradas en el sistema de ventas de Mercado Libre México.

Tabla clientes:

id_cliente nombre ciudad
1 Ana Torres CDMX
2 Luis Ramírez Guadalajara
3 Sofía Mendoza Monterrey
4 Carlos Vega Puebla

Tabla pedidos:

id_pedido id_cliente producto monto
101 1 Teclado USB $850
102 2 Audífonos $1,200
103 1 Mouse inalámbrico $650
104 3 Webcam HD $1,800

Nota que Carlos Vega (id_cliente = 4) no tiene ningún pedido todavía. Eso será importante más adelante.

INNER JOIN: solo lo que coincide

INNER JOIN regresa únicamente las filas que tienen coincidencia en ambas tablas. Si un cliente no tiene pedido, no aparece. Si un pedido no tiene cliente registrado, tampoco aparece.

Sintaxis base:

SELECT columnas
FROM tabla1
INNER JOIN tabla2 ON tabla1.columna_comun = tabla2.columna_comun;

Ejemplo concreto:

SELECT clientes.nombre, pedidos.producto, pedidos.monto
FROM clientes
INNER JOIN pedidos ON clientes.id_cliente = pedidos.id_cliente;

Resultado:

nombre producto monto
Ana Torres Teclado USB $850
Luis Ramírez Audífonos $1,200
Ana Torres Mouse inalámbrico $650
Sofía Mendoza Webcam HD $1,800

Carlos Vega no aparece porque no tiene pedidos. INNER JOIN solo muestra lo que existe en ambos lados.

Alias de tabla: escribe menos, lee más

Cuando los nombres de tablas son largos, repetirlos en cada columna se vuelve tedioso. Puedes usar alias para abreviarlos.

SELECT c.nombre, p.producto, p.monto
FROM clientes AS c
INNER JOIN pedidos AS p ON c.id_cliente = p.id_cliente;

El resultado es exactamente el mismo. Solo escribiste c y p en lugar de los nombres completos. En proyectos reales con tablas de nombres largos como detalle_pedidos_historico, esto ahorra mucho tiempo.

LEFT JOIN: todos los de la izquierda, con o sin pareja

LEFT JOIN regresa todas las filas de la tabla de la izquierda, más las filas que coincidan de la tabla de la derecha. Si no hay coincidencia en la derecha, los campos aparecen como NULL.

Sintaxis:

SELECT columnas
FROM tabla1
LEFT JOIN tabla2 ON tabla1.columna_comun = tabla2.columna_comun;

Ejemplo:

SELECT c.nombre, p.producto, p.monto
FROM clientes AS c
LEFT JOIN pedidos AS p ON c.id_cliente = p.id_cliente;

Resultado:

nombre producto monto
Ana Torres Teclado USB $850
Luis Ramírez Audífonos $1,200
Ana Torres Mouse inalámbrico $650
Sofía Mendoza Webcam HD $1,800
Carlos Vega NULL NULL

Ahora Carlos Vega sí aparece, pero sin producto ni monto porque no tiene pedidos. Eso es exactamente la diferencia clave entre INNER JOIN y LEFT JOIN.

¿Cuándo usar INNER JOIN y cuándo LEFT JOIN?

Usa INNER JOIN cuando solo te interesan los registros que tienen relación en ambas tablas. Por ejemplo: mostrar solo los clientes que ya compraron.

Usa LEFT JOIN cuando quieres ver todos los registros de la tabla principal, aunque algunos no tengan datos relacionados. Por ejemplo: ver todos los clientes registrados, incluyendo los que aún no han comprado.

En el sistema de FEMSA, si quieres auditar qué distribuidoras no han registrado ventas este mes, usas LEFT JOIN para que las distribuidoras sin ventas aparezcan con NULL.

Filtrar resultados después del JOIN

Puedes combinar JOIN con WHERE para filtrar los resultados. Esto es muy poderoso.

Ejemplo: pedidos de clientes en CDMX con monto mayor a $700:

SELECT c.nombre, c.ciudad, p.producto, p.monto
FROM clientes AS c
INNER JOIN pedidos AS p ON c.id_cliente = p.id_cliente
WHERE c.ciudad = 'CDMX' AND p.monto > 700;

Resultado:

nombre ciudad producto monto
Ana Torres CDMX Teclado USB $850

Primero JOIN une las tablas. Después WHERE filtra solo lo que cumple las condiciones.

Combinar JOIN con GROUP BY

En la lección anterior aprendiste GROUP BY con funciones de agregación. Puedes combinarlos con JOIN para crear reportes completos.

Ejemplo: total de ventas por cliente:

SELECT c.nombre, COUNT(p.id_pedido) AS total_pedidos, SUM(p.monto) AS total_ventas
FROM clientes AS c
INNER JOIN pedidos AS p ON c.id_cliente = p.id_cliente
GROUP BY c.nombre
ORDER BY total_ventas DESC;

Resultado:

nombre total_pedidos total_ventas
Ana Torres 2 $1,500
Sofía Mendoza 1 $1,800
Luis Ramírez 1 $1,200

Este tipo de reporte es exactamente lo que un analista de datos en Bimbo o en Liverpool presentaría en una reunión de resultados.

Errores comunes al usar JOIN

Error 1: Olvidar la condición ON. Si escribes JOIN sin la parte ON tabla1.col = tabla2.col, obtienes un producto cartesiano: cada fila de la primera tabla se combina con cada fila de la segunda. Con tablas grandes, eso genera millones de filas innecesarias y puede bloquear el servidor.

Error 2: Columnas ambiguas sin prefijo de tabla. Si ambas tablas tienen una columna llamada id_cliente y solo escribes id_cliente sin indicar de qué tabla, SQL no sabe a cuál te refieres y lanza un error. Siempre escribe c.id_cliente o p.id_cliente.

Error 3: Confundir LEFT y RIGHT JOIN. RIGHT JOIN hace lo contrario de LEFT JOIN: trae todas las filas de la tabla derecha. En la práctica, casi siempre puedes reescribir un RIGHT JOIN como un LEFT JOIN intercambiando el orden de las tablas. La mayoría de equipos usan solo LEFT JOIN para mantener consistencia en el código.

Error 4: No usar alias cuando las tablas tienen nombres largos. Escribir detalle_pedidos_historico.id_cliente en cada columna es innecesario y dificulta leer la consulta. Define alias desde el principio con AS.

El orden de una consulta con JOIN

Cuando combines todo lo que has aprendido, tu consulta seguirá este orden:

SELECT   -- qué columnas quieres ver
FROM     -- tabla principal
JOIN     -- tabla secundaria y condición ON
WHERE    -- filtros de filas
GROUP BY -- agrupación
HAVING   -- filtros de grupos
ORDER BY -- orden de resultados
LIMIT    -- cuántas filas mostrar

No todas las consultas usan todas estas cláusulas. Pero cuando las combinan, siempre van en ese orden.

JOIN es el puente que convierte datos dispersos en información útil: sin él, una base de datos relacional no puede responder preguntas reales.

Puntos clave

  • INNER JOIN une dos tablas y regresa solo las filas que tienen coincidencia en ambas. Si no hay coincidencia, la fila no aparece en el resultado.
  • LEFT JOIN regresa todas las filas de la tabla de la izquierda y agrega NULL donde no hay coincidencia en la tabla de la derecha. Úsalo cuando necesitas ver registros aunque no tengan datos relacionados.
  • La condición ON es obligatoria en todo JOIN: indica qué columna tienen en común las dos tablas. Sin ella, obtienes un producto cartesiano que multiplica las filas innecesariamente.
  • Usa alias de tabla (por ejemplo, clientes AS c) para escribir consultas más cortas y legibles, especialmente cuando dos tablas comparten el nombre de una columna.
  • Puedes combinar JOIN con WHERE, GROUP BY y funciones de agregación para construir reportes completos como total de ventas por cliente o pedidos por región, en una sola consulta.

Comparte esta lección: