> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Estructura de datos preparada opcional para su uso en operaciones JOIN.

# Motor de tabla Join

Estructura de datos preparada opcional para su uso en operaciones [JOIN](/es/reference/statements/select/join).

<Note>
  En ClickHouse Cloud, si su servicio se creó con una versión anterior a la 25.4, deberá establecer la compatibilidad en al menos 25.4 mediante `SET compatibility=25.4`.
</Note>

<div id="creating-a-table">
  ## Crear una tabla
</div>

```sql theme={null}
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
) ENGINE = Join(join_strictness, join_type, k1[, k2, ...])
```

Consulta la descripción detallada de la sentencia [CREATE TABLE](/es/reference/statements/create/table).

<div id="engine-parameters">
  ## Parámetros del motor
</div>

<div id="join_strictness">
  ### `join_strictness`
</div>

`join_strictness` – [modo de JOIN](/es/reference/statements/select/join#supported-types-of-join).

<div id="join_type">
  ### `join_type`
</div>

`join_type` – [tipo de JOIN](/es/reference/statements/select/join#supported-types-of-join).

<div id="key-columns">
  ### Columnas clave
</div>

`k1[, k2, ...]` – columnas clave de la cláusula `USING` con las que se realiza la operación `JOIN`.

Introduzca los parámetros `join_strictness` y `join_type` sin comillas; por ejemplo, `Join(ANY, LEFT, col1)`. Deben coincidir con la operación `JOIN` para la que se va a utilizar la tabla. Si los parámetros no coinciden, ClickHouse no lanza ninguna excepción y puede devolver datos incorrectos.

<div id="specifics-and-recommendations">
  ## Particularidades y recomendaciones
</div>

<div id="data-storage">
  ### Almacenamiento de datos
</div>

Los datos de la tabla `Join` siempre se almacenan en la RAM. Al insertar filas en una tabla, ClickHouse escribe bloques de datos en el directorio del disco para poder restaurarlos cuando el servidor se reinicie.

Si el servidor se reinicia de forma incorrecta, el bloque de datos en el disco podría perderse o dañarse. En este caso, puede ser necesario eliminar manualmente el archivo que contiene los datos dañados.

<div id="selecting-and-inserting-data">
  ### Selección e inserción de datos
</div>

Puede usar consultas `INSERT` para agregar datos a tablas con motor `Join`. Si la tabla se creó con modo `ANY`, los datos correspondientes a claves duplicadas se ignoran. Con modo `ALL`, se agregan todas las filas.

Los principales casos de uso de las tablas con motor `Join` son los siguientes:

* Coloque la tabla en el lado derecho de una cláusula `JOIN`.
* Llame a la función [joinGet](/es/reference/functions/regular-functions/other-functions#joinGet), que permite extraer datos de la tabla del mismo modo que de un diccionario.

<div id="deleting-data">
  ### Eliminación de datos
</div>

Las consultas `ALTER DELETE` para tablas con motor `Join` se implementan como [mutaciones](/es/reference/statements/alter#mutations). La mutación `DELETE` lee los datos filtrados y sobrescribe los datos en memoria y en disco.

<div id="join-limitations-and-settings">
  ### Limitaciones y ajustes
</div>

Al crear una tabla, se aplican los siguientes ajustes:

<div id="join_use_nulls">
  #### `join_use_nulls`
</div>

[join\_use\_nulls](/es/reference/settings/session-settings#join_use_nulls)

<div id="max_rows_in_join">
  #### `max_rows_in_join`
</div>

[max\_rows\_in\_join](/es/reference/settings/session-settings#max_rows_in_join)

<div id="max_bytes_in_join">
  #### `max_bytes_in_join`
</div>

[max\_bytes\_in\_join](/es/reference/settings/session-settings#max_bytes_in_join)

<div id="join_overflow_mode">
  #### `join_overflow_mode`
</div>

[join\_overflow\_mode](/es/reference/settings/session-settings#join_overflow_mode)

<div id="join_any_take_last_row">
  #### `join_any_take_last_row`
</div>

[join\_any\_take\_last\_row](/es/reference/settings/session-settings#join_any_take_last_row)

<div id="join_use_nulls">
  #### `join_use_nulls`
</div>

<div id="persistent">
  #### Persistente
</div>

Deshabilita la persistencia en los motores de tabla Join y [Set](/es/reference/engines/table-engines/special/set).

Reduce la sobrecarga de IO. Es adecuado para escenarios en los que se prioriza el rendimiento y no se requiere persistencia.

Valores posibles:

* 1 — Habilitado.
* 0 — Deshabilitado.

Valor predeterminado: `1`.

Las tablas del motor `Join` no pueden usarse en operaciones `GLOBAL JOIN`.

El motor `Join` permite especificar la configuración [join\_use\_nulls](/es/reference/settings/session-settings#join_use_nulls) en la sentencia `CREATE TABLE`. La consulta [SELECT](/es/reference/statements/select) debe tener el mismo valor de `join_use_nulls`.

<div id="example">
  ## Ejemplos de uso
</div>

Creación de la tabla de la izquierda:

```sql theme={null}
CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog;
```

```sql theme={null}
INSERT INTO id_val VALUES (1,11)(2,12)(3,13);
```

Creación de la tabla `Join` del lado derecho:

```sql theme={null}
CREATE TABLE id_val_join(`id` UInt32, `val` UInt8) ENGINE = Join(ANY, LEFT, id);
```

```sql theme={null}
INSERT INTO id_val_join VALUES (1,21)(1,22)(3,23);
```

Uniendo las tablas:

```sql theme={null}
SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id);
```

```text theme={null}
┌─id─┬─val─┬─id_val_join.val─┐
│  1 │  11 │              21 │
│  2 │  12 │               0 │
│  3 │  13 │              23 │
└────┴─────┴─────────────────┘
```

Como alternativa, puede recuperar datos de la tabla `Join` especificando el valor de la clave de join:

```sql theme={null}
SELECT joinGet('id_val_join', 'val', toUInt32(1));
```

```text theme={null}
┌─joinGet('id_val_join', 'val', toUInt32(1))─┐
│                                         21 │
└────────────────────────────────────────────┘
```

Eliminar una fila de la tabla `Join`:

```sql theme={null}
ALTER TABLE id_val_join DELETE WHERE id = 3;
```

```text theme={null}
┌─id─┬─val─┐
│  1 │  21 │
└────┴─────┘
```
