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

> Documentação do modificador de tipo Nullable no ClickHouse

# Nullable(T)

Permite armazenar um marcador especial ([NULL](/pt-BR/reference/syntax)) que indica "valor ausente" junto com os valores normais permitidos por `T`. Por exemplo, uma coluna do tipo `Nullable(Int8)` pode armazenar valores do tipo `Int8`, e as linhas que não tiverem um valor armazenarão `NULL`.

`T` não pode ser nenhum dos seguintes tipos de dados compostos:

* [Array](/pt-BR/reference/data-types/array) — Sem suporte
* [Map](/pt-BR/reference/data-types/map) — Sem suporte
* [Tuple](/pt-BR/reference/data-types/tuple) — Suporte experimental disponível\*

No entanto, tipos de dados compostos **podem conter** valores do tipo `Nullable`, por exemplo, `Array(Nullable(Int8))` ou `Tuple(Nullable(String), Nullable(Int64))`.

<Info>
  **Experimental: Tuplas Nullable**

  * [Nullable(Tuple(...))](/pt-BR/reference/data-types/tuple#nullable-tuple) tem suporte quando `allow_experimental_nullable_tuple_type = 1` está habilitado.
</Info>

Um campo do tipo `Nullable` não pode ser incluído em índices da tabela.

`NULL` é o valor padrão de qualquer tipo `Nullable`, salvo especificação em contrário na configuração do servidor ClickHouse.

<div id="storage-features">
  ## Recursos de armazenamento
</div>

Para armazenar valores do tipo `Nullable` em uma coluna de tabela, o ClickHouse usa um arquivo separado com máscaras `NULL`, além do arquivo normal com os valores. As entradas no arquivo de máscaras permitem que o ClickHouse diferencie, em cada linha da tabela, entre `NULL` e o valor padrão do tipo de dado correspondente. Por causa desse arquivo adicional, uma coluna `Nullable` consome mais espaço de armazenamento do que uma coluna normal semelhante.

<Note>
  Usar `Nullable` quase sempre afeta negativamente o desempenho. Tenha isso em mente ao projetar seus bancos de dados.
</Note>

<div id="finding-null">
  ## Encontrando NULL
</div>

É possível localizar valores `NULL` em uma coluna usando a subcoluna `null`, sem precisar ler a coluna inteira. Ela retorna `1` se o valor correspondente for `NULL` e `0`, caso contrário.

**Exemplo**

```sql title="Query" theme={null}
CREATE TABLE nullable (`n` Nullable(UInt32)) ENGINE = MergeTree ORDER BY tuple();

INSERT INTO nullable VALUES (1) (NULL) (2) (NULL);

SELECT n.null FROM nullable;
```

```text title="Response" theme={null}
┌─n.null─┐
│      0 │
│      1 │
│      0 │
│      1 │
└────────┘
```

<div id="usage-example">
  ## Exemplo de uso
</div>

```sql theme={null}
CREATE TABLE t_null(x Int8, y Nullable(Int8)) ENGINE TinyLog
```

```sql theme={null}
INSERT INTO t_null VALUES (1, NULL), (2, 3)
```

```sql theme={null}
SELECT x + y FROM t_null
```

```text theme={null}
┌─plus(x, y)─┐
│       ᴺᵁᴸᴸ │
│          5 │
└────────────┘
```
