SQL Server

INNER JOIN en SQL Server: ejemplos reales con clientes y pedidos (guía completa + ejercicios)

Publicado por J. Panduro hace 4 meses

INNER JOIN en SQL Server: ejemplos reales con clientes y pedidos (guía completa + ejercicios)

Cuando empiezas con SQL, todo parece sencillo hasta que necesitas combinar datos de varias tablas. Ahí es donde entra INNER JOIN, una de las herramientas más importantes en SQL Server.


¿Qué es INNER JOIN?


INNER JOIN es una de las operaciones más utilizadas en SQL Server para combinar información proveniente de dos o más tablas relacionadas. Su función principal es devolver únicamente los registros que tienen una coincidencia válida en ambas tablas según una condición de relación definida por el desarrollador.


En otras palabras, INNER JOIN busca los datos que existen en ambas tablas y los une en un único resultado. Si un registro no encuentra una coincidencia en la otra tabla, simplemente no será incluido en la consulta.

Esta característica lo convierte en una herramienta fundamental para trabajar con bases de datos relacionales, donde la información suele estar distribuida en múltiples tablas para evitar redundancia y mejorar la organización de los datos.


Ejemplo conceptual


Supongamos que tenemos las siguientes tablas:

  1. Clientes
  2. Pedidos

Un cliente puede realizar uno o varios pedidos a lo largo del tiempo. Para relacionar ambas tablas, normalmente se utiliza una clave como IdCliente.

Cuando ejecutamos un INNER JOIN, SQL Server busca los registros que tienen el mismo valor de IdCliente en ambas tablas y devuelve únicamente aquellos que están relacionados.


Por ejemplo:

  1. Cliente Juan → Tiene pedidos → Aparece en el resultado.
  2. Cliente María → Tiene pedidos → Aparece en el resultado.
  3. Cliente Pedro → No tiene pedidos → No aparece en el resultado.

De esta manera, INNER JOIN muestra únicamente la información que existe en ambas tablas al mismo tiempo.


Dataset completo (copiar y ejecutar)


-- 1. Limpiar tablas
IF OBJECT_ID('Pedidos', 'U') IS NOT NULL DROP TABLE Pedidos;
IF OBJECT_ID('Clientes', 'U') IS NOT NULL DROP TABLE Clientes;

-- 2. Crear tabla Clientes
CREATE TABLE Clientes (
IdCliente INT IDENTITY(1,1) PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL,
Email VARCHAR(100) NOT NULL
);

-- 3. Crear tabla Pedidos
CREATE TABLE Pedidos (
IdPedido INT IDENTITY(1,1) PRIMARY KEY,
IdCliente INT NOT NULL,
Total DECIMAL(10,2) NOT NULL,
Fecha DATETIME DEFAULT GETDATE()
);

-- 4. Insertar Clientes
INSERT INTO Clientes (Nombre, Email)
VALUES
('Juan Pérez', 'juan@email.com'),
('Ana López', 'ana@email.com'),
('Carlos Ruiz', 'carlos@email.com');

-- 5. Insertar Pedidos
INSERT INTO Pedidos (IdCliente, Total)
VALUES
(1, 500.00),
(1, 300.00),
(2, 150.00);



Uso básico de INNER JOIN


SELECT *
FROM Clientes
INNER JOIN Pedidos
ON Clientes.IdCliente = Pedidos.IdCliente;


  1. Solo clientes que tienen pedidos
  2. Se combinan ambas tablas


SELECT
Clientes.Nombre,
Pedidos.Total,
Pedidos.Fecha
FROM Clientes
INNER JOIN Pedidos
ON Clientes.IdCliente = Pedidos.IdCliente;


Muestra:

  1. Nombre del cliente
  2. Total del pedido
  3. Fecha


Resultado esperado


Verás:


  1. Datos combinados
  2. Solo registros relacionados
  3. Clientes sin pedidos NO aparecen


¿Qué pasa con clientes sin pedidos?


No aparecen en INNER JOIN

Esto es clave para entender la diferencia con LEFT JOIN


Ejercicios


Nivel básico


Mostrar nombre del cliente y total de sus pedidos


SELECT
c.Nombre,
p.Total
FROM Clientes c
INNER JOIN Pedidos p
ON c.IdCliente = p.IdCliente;



Nivel intermedio


Mostrar:


  1. Nombre del cliente
  2. Total del pedido
  3. Solo pedidos mayores a 200


SELECT
c.Nombre,
p.Total
FROM Clientes c
INNER JOIN Pedidos p
ON c.IdCliente = p.IdCliente
WHERE p.Total > 200;


Nivel entrevista


Obtener:

  1. Nombre del cliente
  2. Cantidad de pedidos realizados


SELECT
c.Nombre,
COUNT(p.IdPedido) AS TotalPedidos
FROM Clientes c
INNER JOIN Pedidos p
ON c.IdCliente = p.IdCliente
GROUP BY c.Nombre;


Ejercicio tipo empresa


Obtener:

  1. Nombre del cliente
  2. Suma total de sus pedidos


SELECT
c.Nombre,
SUM(p.Total) AS TotalGastado
FROM Clientes c
INNER JOIN Pedidos p
ON c.IdCliente = p.IdCliente
GROUP BY c.Nombre;



Buenas prácticas


  1. Usa alias (c, p) para simplificar
  2. Especifica columnas necesarias
  3. Usa nombres claros
  4. Aplica filtros con WHERE
  5. Combina con GROUP BY para análisis


CONCLUSIÓN


En entornos empresariales, INNER JOIN se utiliza constantemente para generar reportes, consultar información relacionada y construir procesos de negocio. Por ejemplo, permite obtener clientes con sus pedidos, productos con sus categorías, empleados con sus departamentos o facturas con sus detalles de venta.


Dominar INNER JOIN es un paso fundamental para cualquier desarrollador SQL Server, ya que constituye la base para realizar consultas más avanzadas y aprovechar al máximo el potencial de las bases de datos relacionales. Cuanto mejor comprendas esta operación, más fácil será construir consultas eficientes, obtener información valiosa y resolver problemas reales en proyectos profesionales.

Sobre el autor

J. Panduro es desarrollador de software y creador de HPanduDigital. Comparte contenido sobre Desarrollo Web, inteligencia artificial, y transformación digital, basado en experiencias reales y proyectos prácticos.

Buscar artículos

Escribe al menos 2 caracteres para buscar.