SELF JOIN en SQL

Un SELF JOIN en SQL es un JOIN en el que una tabla se une consigo misma . Se usan alias de tabla distintos (por ejemplo A y B ) para tratar cada aparición como una tabla diferente.

SELF JOIN en SQL es una pieza habitual del flujo SQL: consultar, filtrar, agrupar o modificar datos. Cada ejemplo usa tablas de demostración para que puedas experimentar sin riesgo.

Cómo practicar: ejecuta la consulta tal cual, revisa columnas y tipos, luego cambia un filtro o un alias y vuelve a ejecutar.

SELF JOIN en SQL es una pieza habitual del flujo SQL: consultar, filtrar, agrupar o modificar datos. Cada ejemplo usa tablas de demostración para que puedas experimentar sin riesgo.

Cómo practicar: ejecuta la consulta tal cual, revisa columnas y tipos, luego cambia un filtro o un alias y vuelve a ejecutar.

Sirve para comparar filas dentro de la misma tabla: clientes de la misma ciudad, productos de la misma categoría, empleados del mismo departamento, etc.


Sintaxis SELF JOIN en SQL

La sintaxis indica el orden de argumentos y palabras clave. Copia la plantilla y sustituye nombres de columnas o literales entre comillas simples.

Plantilla con alias

    SELECT A.columna, B.columna
FROM tabla AS A
INNER JOIN tabla AS B
           ON A.clave_relacion = B.clave_relacion
          AND A.id < B.id;
  
Diagrama SELF JOIN: una misma tabla unida consigo misma mediante alias A (empleado) y B (jefe)
En un SELF JOIN la misma tabla física actúa con dos roles lógicos (alias A y B) unidos por una clave.

Ejemplo SELF JOIN en SQL

Pares de clientes distintos que comparten Ciudad :

Pares en Madrid, Barcelona…

    SELECT A.Nombre_Cliente AS Cliente1,
       B.Nombre_Cliente AS Cliente2,
       A.Ciudad
FROM Clientes A
INNER JOIN Clientes B
           ON A.Ciudad = B.Ciudad
          AND A.ID_Cliente < B.ID_Cliente
ORDER BY A.Ciudad, Cliente1;
  
Abrir en editor

Resultado: Ana García y Carlos Ruiz comparten Madrid.

Cliente1Cliente2Ciudad
Ana GarcíaCarlos RuizMadrid
Par de clientes en la misma ciudad (Madrid). La condición A.ID_Cliente < B.ID_Cliente evita duplicar pares.

Tabla demo Clientes para SELF JOIN

Base de datos de demostración: Clientes

Observa qué columnas devuelve la consulta y cómo se nombran con AS. Ese alias es lo que verás en la cuadrícula del editor.

ID_Cliente Nombre_Cliente Ciudad Pais N_Ventas
1Ana GarcíaMadridEspaña120
2Luis PérezBarcelonaEspaña85
3María LópezValenciaEspaña200
4Carlos RuizMadridEspaña45
5Elena TorresSevillaEspaña67
6John SmithLondonUK150
7Marie DuboisParisFrancia92
8Hans MüllerBerlinAlemania78
9Luca RossiRomaItalia110
10Sofia AndersStockholmSuecia55
Tabla Clientes en el editor SQL (10 filas). La usamos en la mayoría de ejemplos de esta fase.

SELF JOIN con varias condiciones

Añade condiciones al ON para acotar los pares:

Clientes españoles de ciudades distintas

    SELECT A.Nombre_Cliente AS Cliente1,
       B.Nombre_Cliente AS Cliente2,
       A.Pais
FROM Clientes A
INNER JOIN Clientes B
           ON A.Pais = B.Pais
          AND A.ID_Cliente < B.ID_Cliente
          AND A.Ciudad <> B.Ciudad
ORDER BY A.Pais, Cliente1;
  
Abrir en editor

SELF JOIN en la tabla Productos

La misma técnica funciona con cualquier tabla. Aquí, pares de productos de la misma categoría:

Productos de la misma categoría

    SELECT A.Nombre_Producto AS Producto1,
       B.Nombre_Producto AS Producto2,
       A.ID_Categoria
FROM Productos A
INNER JOIN Productos B
           ON A.ID_Categoria = B.ID_Categoria
          AND A.ID_Producto < B.ID_Producto
ORDER BY A.ID_Categoria, Producto1;
  
Abrir en editor

Resumen SELF JOIN

  • Une una tabla consigo misma con alias distintos.
  • Usa A.id < B.id para evitar duplicar pares y emparejar una fila consigo misma.
  • Puedes combinar varias condiciones en ON .
  • Siguiente paso: LIMIT / SELECT TOP .

Cómo practicar en el editor

1. Pulsa Pruébalo tú mismo en un ejemplo.
2. Cambia un filtro, columna o literal.
3. Ejecuta y compara el resultado con la tabla de ejemplo.


Practica con ejercicios

Repasa la lección con consultas sobre Clientes (Elena Torres, Valencia…) y Productos (pera, mango, fresa) de nuestra base demo.

Ejercicio: Clientes de la misma ciudad

Practica unir la tabla Clientes consigo misma. Usa la tabla Clientes de la demo (Elena Torres, Valencia…).

Consulta

    SELECT A.Nombre_Cliente AS Cliente1, B.Nombre_Cliente AS Cliente2, A.Ciudad
FROM Clientes A
INNER JOIN Clientes B ON A.Ciudad = B.Ciudad AND A.ID_Cliente < B.ID_Cliente
ORDER BY A.Ciudad, Cliente1;
  
Abrir en editor

Ejercicio: Mismo país, distinta ciudad

SELF JOIN con condiciones adicionales en WHERE/ON. Usa la tabla Clientes de la demo (Elena Torres, Valencia…).

Consulta

    SELECT A.Nombre_Cliente AS Cliente1, B.Nombre_Cliente AS Cliente2, A.Pais
FROM Clientes A
INNER JOIN Clientes B ON A.Pais = B.Pais AND A.ID_Cliente < B.ID_Cliente AND A.Ciudad <> B.Ciudad
ORDER BY A.Pais, Cliente1;
  
Abrir en editor

Ejercicio: Productos de la misma categoría

SELF JOIN en Productos por ID_Categoria. Usa la tabla Clientes de la demo (Elena Torres, Valencia…).

Consulta

    SELECT A.Nombre_Producto AS Producto1, B.Nombre_Producto AS Producto2, A.ID_Categoria
FROM Productos A
INNER JOIN Productos B ON A.ID_Categoria = B.ID_Categoria AND A.ID_Producto < B.ID_Producto
ORDER BY A.ID_Categoria, Producto1;
  
Abrir en editor

Cómo practicar

1. Pulsa Ejecutar aquí en el bloque.
2. Modifica la consulta (filtro, columnas…).
3. O abre el editor para más espacio.

Comprueba lo aprendido

Responde 2–3 preguntas sobre esta lección. Verás ✓ en verde si aciertas o ✗ en rojo si fallas.