Los tipos de operadores JOIN que nos podemos encontrar en la cláusula FROM son los siguientes:
- CROSS JOIN: Producto cartesiano de tablas
- INNER JOIN: Devuelve solo los registros coincidentes
- LEFT JOIN: Devuelve todas las filas de la tabla de la izquierda y las filas de la derecha que coinciden, las que no coinciden se rellenan a nulos
- RIGHT JOIN: Devuelve todas las filas de la tabla de la derecha y las filas de la izquierda que coinciden, las que no coinciden se rellenan a nulos
- FULL JOIN: devuelve de las dos tablas las coincidentes y las no coincidentes, como si hiciéramos y Right y un Left a la vez.
Los operadores de tabla son procesados de izquierda a derecha.
Ejemplos:
A continuación, se muestra el conjunto de resultados obtenidos tras la aplicación de diferentes operadores JOIN.
-- ejemplo 4.1. crear tabla
CREATE TABLE [dbo].[Tab_PruebasA](
[Id] [int] NOT NULL,
[Descrip] [varchar](50) NULL,
CONSTRAINT [PK_Tab_PruebasA] PRIMARY KEY CLUSTERED ([Id] ASC))
CREATE TABLE [dbo].[Tab_PruebasB](
[Id] [int] NOT NULL,
[Descrip] [varchar](50) NULL,
[IdEstado] [bit] NOT NULL CONSTRAINT [DF_Tab_PruebasB_IdEstado] DEFAULT ((0)),
CONSTRAINT [PK_Tab_PruebasB] PRIMARY KEY CLUSTERED ([Id] ASC))
-- poblar tablas
INSERT INTO [Tab_PruebasA] VALUES (1,'111111'),(2,'222222'),(3,'333333'),(4,'444444')
INSERT INTO [Tab_PruebasB] VALUES (1,'111111',0),(2,'222222',1),(5,'555555',0)
Cuando se trabaja con el operador INNER JOIN es indiferente si la condición o filtro de nuestra consulta la ponemos en el ON del operador o en la cláusula WHERE. Sin embargo, cuando trabajamos con el operador LEFT JOIN o RIGHT JOIN los resultados varían: