# Join

El prefijo join une la tabla cargada con una tabla existente o con la última tabla de datos creada.

El efecto de unir datos es ampliar la tabla de destino con un conjunto adicional de campos o atributos, es decir, aquellos que aún no están presentes en la tabla de destino. Cualquier nombre de campo común entre el conjunto de datos de origen y la tabla de destino se utiliza para determinar cómo asociar los nuevos registros entrantes. Esto se conoce comúnmente como una "unión o join natural". Una operación de unión de Qlik puede dar lugar a que la tabla de destino resultante tenga más o menos registros de los que tenía al principio, según la singularidad de la asociación de unión y el tipo de unión empleado.

[Join script prefix](https://play.vidyard.com/7xrdzssVH99Jsr8gmPunCC)

Hay cuatro tipos de uniones:

Left join

Left joins son el tipo de unión más común. Por ejemplo, si tiene un conjunto de datos de transacciones y le gustaría combinarlo con un conjunto de datos de referencia, normalmente usaría un `Left Join`. Primero cargaría la tabla de transacciones, luego cargaría el conjunto de datos de referencia a la vez que lo une mediante un prefijo `Left Join` en la tabla de transacciones ya cargada. Un `Left Join` mantendría todas las transacciones tal como están y agregaría los campos de datos de referencia complementarios donde se encuentra un resultado coincidente.

Unión interna - Inner join

Cuando tiene dos conjuntos de datos en los que solo le importan los resultados en los que hay una asociación coincidente, considere usar un `Inner Join`. Esto eliminará todos los registros tanto de los datos de origen cargados como de la tabla de destino si no se encuentra ninguna coincidencia. Como resultado, esto puede dejar su tabla de destino con menos registros que antes de que se llevara a cabo la operación de unión.

Outer join

Cuando necesite conservar tanto los registros de destino como todos los registros entrantes, utilice un `Outer Join`. Cuando no se encuentra ningún resultado, todavía se conserva cada conjunto de registros, mientras que los campos del lado opuesto de la combinación permanecerán vacíos (nulos).

Si se omite la palabra clave "type", el tipo de unión predeterminado será una unión externa (outer join).

Right join

Este tipo de unión mantiene todos los registros a punto de cargarse, a la vez que reduce los registros de la tabla de destino de la unión a solo aquellos registros en los que hay una coincidencia de asociación en los registros entrantes. Este es un tipo de unión de nicho que a veces se usa como un medio para reducir una tabla de registros ya cargada previamente a un subconjunto requerido.

Conjuntos de resultados a modo de ejemplo de diferentes tipos de operaciones de unión

Conjuntos de resultados a modo de ejemplo de diferentes tipos de operaciones de unión

Conjuntos de resultados a modo de ejemplo de diferentes tipos de operaciones de unión ![Conjuntos de resultados a modo de ejemplo, de diferentes tipos de operaciones de unión, con una representación de antes y después de las tablas de datos que siguen a cada operación.](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-join-examples-operations.png)

Nota informativaSi no hay nombres de campo en común entre el origen y el destino de una operación de unión, la unión dará como resultado un producto cartesiano de todas las filas; esto se denomina "unión cruzada".

Conjunto de resultados a modo de ejemplo de una operación de "cross join"

Conjunto de resultados a modo de ejemplo de una operación de "cross join"

Conjunto de resultados a modo de ejemplo de una operación de "cross join" ![Comparación del antes y después de los datos de entrada con el resultado de una operación de cross join (que puede implicar una operación de unión de cualquier tipo).](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-examples-join-no-common-fields.png)

Sintaxis:

[inner | outer | left | right ]Join [ (tablename ) ]( loadstatement | selectstatement )

Argumentos

| Argumento | Descripción |
| --- | --- |
| tablename | Tabla designada que debe compararse con la tabla cargada. |
| loadstatement o selectstatement | La sentencia LOAD o SELECT para la tabla cargada. |

Estos temas le ayudarán a trabajar con esta función:

Temas relacionados

| Tema | Descripción |
| --- | --- |
| [Combinar tablas con Join y Keep](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm) | Este tema proporciona una explicación más detallada de los conceptos de “unir” y “mantener” conjuntos de datos. |
| [Keep](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm) | El prefijo de carga `Keep` es similar al prefijo `Join`, pero no combina los conjuntos de datos de origen y de destino. En su lugar, recorta cada conjunto de datos según el tipo de operación adoptada (inner, outer, left, o right). |

## Ejemplo 1 - Left join: enriquecer una tabla de destino con un conjunto de datos de referencia

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script de carga y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Un conjunto de datos que representa registros de cambios, el cual se carga en una tabla denominada `Changes`. Incluye un campo clave de ID de estado.

* Un segundo conjunto de datos que representa los estados de cambio, el cual se carga y combina con los registros de cambio originales uniéndolos con un prefijo left join `Join`.

Este left join garantiza que los registros de cambios permanezcan intactos mientras se agregan atributos de estado donde se encuentre un resultado coincidente en los registros de estado entrantes en función de un ID de estado común.

Script de carga

```
Changes:
Load * inline [ 
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact 
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

Status:
Left Join (Changes)
Load * inline [
Status ID	Status	Sub Status
1	Open	Not Started
2	Open	Started
3	Closed	Completed
4	Closed	Cancelled
5	Closed	Obsolete			
] (delimiter is '\t');
```

Resultados

Abra el visor del modelo de datos y observe la forma del modelo de datos. Solo hay una tabla desnormalizada presente. Es una combinación de todos los registros de cambios originales, con los atributos de estado coincidentes unidos en cada registro de cambios.

Modelo de datos internos resultante

| Cambios |
| --- |
| ID de cambio |
| ID de estado |
| Fecha de inicio programada |
| Fecha de finalización programada |
| Impacto de negocio |
| Estado |
| Subestado |

Si expande la ventana de vista previa en el visor del modelo de datos, verá una parte de este conjunto de resultados completo organizado en una tabla:

Vista previa de la tabla de cambios en el visor del modelo de datos

| ID de cambio | ID de estado | Fecha de inicio programada | Fecha de finalización programada | Impacto de negocio | Estado | Subestado |
| --- | --- | --- | --- | --- | --- | --- |
| 10030 | 4 | 19/01/2022 | 23/02/2022 | Ningún valor que mostrar | Cerrado | Cancelado |
| 10031 | 3 | 20/01/2022 | 25/03/2022 | Baja | Cerrado | Finalizado |
| 10015 | 3 | 04/01/2022 | 15/02/2022 | Baja | Cerrado | Finalizado |
| 10103 | 1 | 02/04/2022 | 29/05/2022 | Medio | Abrir | No iniciado |
| 10116 | 1 | 15/04/2022 | 24/04/2022 | Ningún valor que mostrar | Abrir | No iniciado |
| 10134 | 1 | 03/05/2022 | 08/07/2022 | Baja | Abrir | No iniciado |
| 10264 | 1 | 10/09/2022 | 17/10/2022 | Medio | Abrir | No iniciado |
| 10040 | 1 | 29/01/2022 | 22/04/2022 | Ningún valor que mostrar | Abrir | No iniciado |
| 10323 | 1 | 08/11/2022 | 26/11/2022 | Alta | Abrir | No iniciado |
| 10187 | 2 | 25/06/2022 | 24/08/2022 | Baja | Abrir | Iniciado |
| 10185 | 2 | 23/06/2022 | 08/09/2022 | Ningún valor que mostrar | Abrir | Iniciado |
| 10220 | 2 | 28/07/2022 | 06/09/2022 | Ningún valor que mostrar | Abrir | Iniciado |
| 10326 | 2 | 11/11/2022 | 05/12/2022 | Ningún valor que mostrar | Abrir | Iniciado |
| 10138 | 2 | 07/05/2022 | 03/08/2022 | Ningún valor que mostrar | Abrir | Iniciado |
| 10334 | 2 | 19/11/2022 | 06/02/2023 | Baja | Abrir | Iniciado |

Dado que la quinta fila de la tabla Estado (ID. de estado: "5", Estado: "Cerrado", Subestado: "Obsoleto") no corresponde a ninguno de los registros de la tabla Cambios, la información de esta fila no aparece en el conjunto de resultados anterior.

Vuelva al Editor de carga de datos. Cargue los datos y abra una hoja. Cree una nueva tabla y agregue este campo como dimensión: `Status`.

Añada esta medida:

`=Count([Change ID])`

Ahora puede inspeccionar la cantidad de cambios por estado.

Tabla de resultados

| Estado | =Count([Change ID]) |
| --- | --- |
| Abrir | 12 |
| Cerrado | 3 |

## Ejemplo 2 - Inner join: combinar únicamente los registros coincidentes

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script de carga y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Un conjunto de datos que representa registros de cambios, el cual se carga en una tabla denominada `Changes`.

* Un segundo conjunto de datos que representa los registros de cambios que se originan en el sistema de origen `JIRA`. Esto se carga y se combina con los registros originales uniéndolos con un prefijo de carga `Inner Join`.

Este `Inner Join` garantiza que solo se mantengan los cinco registros de cambios que se encuentran en ambos conjuntos de datos.

Script de carga

```
Changes:
Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

JIRA_changes:
Inner Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10000	JIRA					
10030	JIRA
10323	JIRA
10134	JIRA
10334	JIRA
10220	JIRA
20000	TFS
] (delimiter is '\t');
```

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* `Source System`

* `Change ID`

* `Business Impact`

Ahora puede revisar los cinco registros resultantes. La tabla resultante de un `Inner Join` solo incluirá registros con información coincidente en ambos conjuntos de datos.

Tabla de resultados

| Sistema de origen | ID de cambio | Impacto de negocio |
| --- | --- | --- |
| JIRA | 10030 | Ningún valor que mostrar |
| JIRA | 10134 | Baja |
| JIRA | 10220 | Ningún valor que mostrar |
| JIRA | 10323 | Alta |
| JIRA | 10334 | Baja |

## Ejemplo 3 - Outer join: combinar conjuntos de registros superpuestos

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script de carga y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Un conjunto de datos que representa registros de cambios, el cual se carga en una tabla denominada `Changes`.

* Un segundo conjunto de datos que representa los registros de cambios que se originan en el sistema de origen `JIRA`, el cual se carga y se combina con los registros originales uniéndolos con un prefijo de carga `Outer Join`.

Esto garantiza que se conserven todos los registros de cambios superpuestos de ambos conjuntos de datos.

Script de carga

```
// 8 Change records

Changes:
Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
] (delimiter is '\t');

// 6 Change records

JIRA_changes:
Outer Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10030	JIRA
10323	JIRA
10134	JIRA
10334	JIRA
10220	JIRA
10597	JIRA
] (delimiter is '\t');
```

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* `Source System`

* `Change ID`

* `Business Impact`

Ahora puede revisar los 10 registros resultantes.

Tabla de resultados

| Sistema de origen | ID de cambio | Impacto de negocio |
| --- | --- | --- |
| JIRA | 10030 | Ningún valor que mostrar |
| JIRA | 10134 | Baja |
| JIRA | 10220 | Ningún valor que mostrar |
| JIRA | 10323 | - |
| JIRA | 10334 | Baja |
| JIRA | 10597 | - |
| - | 10015 | Baja |
| - | 10031 | Baja |
| - | 10040 | Ningún valor que mostrar |
| - | 10138 | Ninguno |

## Ejemplo 4 - Right join: recortar una tabla de destino mediante un conjunto de datos maestro secundario

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

#### Script de carga y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Un conjunto de datos que representa registros de cambios, el cual se carga en una tabla denominada Changes.

* Un segundo conjunto de datos que representa los registros de cambios que se originan en el sistema de origen Teamwork. Esto se carga y se combina con los registros originales al unirlo con un prefijo de carga Right Join.

Esto garantiza que solo se mantengan los registros de cambios Teamwork, sin perder ningún registro Teamwork si la tabla de destino no tiene ningún Change ID.

Script de carga

```
Changes:

Load * inline [
Change ID	Status ID	Scheduled Start Date	Scheduled End Date	Business Impact
10030	4	19/01/2022	23/02/2022	None
10015	3	04/01/2022	15/02/2022	Low
10103	1	02/04/2022	29/05/2022	Medium
10185	2	23/06/2022	08/09/2022	None
10323	1	08/11/2022	26/11/2022	High
10326	2	11/11/2022	05/12/2022	None
10138	2	07/05/2022	03/08/2022	None
10031	3	20/01/2022	25/03/2022	Low
10040	1	29/01/2022	22/04/2022	None
10134	1	03/05/2022	08/07/2022	Low
10334	2	19/11/2022	06/02/2023	Low
10220	2	28/07/2022	06/09/2022	None
10264	1	10/09/2022	17/10/2022	Medium
10116	1	15/04/2022	24/04/2022	None
10187	2	25/06/2022	24/08/2022	Low
] (delimiter is '\t');

Teamwork_changes:
Right Join (Changes)
Load
  [Ticket ID] AS [Change ID],
  [Source System]
inline
[
Ticket ID	Source System
10040	Teamwork
10015	Teamwork
10103	Teamwork
10031	Teamwork
50231	Teamwork
] (delimiter is '\t');
```

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* Source System

* Change ID

* Business Impact

Ahora puede revisar los cinco registros resultantes.

Tabla de resultados

| Sistema de origen | ID de cambio | Impacto de negocio |
| --- | --- | --- |
| Trabajo en equipo | 10015 | Baja |
| Trabajo en equipo | 10031 | Baja |
| Trabajo en equipo | 10040 | Ningún valor que mostrar |
| Trabajo en equipo | 10103 | Medio |
| Trabajo en equipo | 50231 | - |

## Más información

* [Load](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Select](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Select.htm)
* [Inner](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Inner.htm)
* [Outer](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Outer.htm)
* [Left](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Left.htm)
* [Right](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Right.htm)
* [Keep](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Keep.htm)
* [Combinar tablas con Join y Keep](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm)