> ## 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.

> Documentação da cláusula DISTINCT

# Cláusula DISTINCT

Se `SELECT DISTINCT` for especificado, apenas linhas únicas permanecerão no resultado da consulta. Assim, de cada conjunto de linhas totalmente idênticas no resultado, apenas uma linha será mantida.

Você pode especificar a lista de colunas que devem ter valores únicos: `SELECT DISTINCT ON (column1, column2,...)`. Se as colunas não forem especificadas, todas serão levadas em consideração.

Considere a tabela:

```text theme={null}
┌─a─┬─b─┬─c─┐
│ 1 │ 1 │ 1 │
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 2 │
│ 2 │ 2 │ 2 │
│ 1 │ 1 │ 2 │
│ 1 │ 2 │ 2 │
└───┴───┴───┘
```

Usando `DISTINCT` sem especificar colunas:

```sql theme={null}
SELECT DISTINCT * FROM t1;
```

```text theme={null}
┌─a─┬─b─┬─c─┐
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 2 │
│ 1 │ 1 │ 2 │
│ 1 │ 2 │ 2 │
└───┴───┴───┘
```

Usando `DISTINCT` com as colunas especificadas:

```sql theme={null}
SELECT DISTINCT ON (a,b) * FROM t1;
```

```text theme={null}
┌─a─┬─b─┬─c─┐
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 2 │
│ 1 │ 2 │ 2 │
└───┴───┴───┘
```

<div id="distinct-and-order-by">
  ## DISTINCT e ORDER BY
</div>

O ClickHouse permite usar as cláusulas `DISTINCT` e `ORDER BY` para colunas diferentes em uma mesma consulta. A cláusula `DISTINCT` é executada antes da cláusula `ORDER BY`.

Considere a tabela:

```text theme={null}
┌─a─┬─b─┐
│ 2 │ 1 │
│ 1 │ 2 │
│ 3 │ 3 │
│ 2 │ 4 │
└───┴───┘
```

Seleção de dados:

```sql theme={null}
SELECT DISTINCT a FROM t1 ORDER BY b ASC;
```

```text theme={null}
┌─a─┐
│ 2 │
│ 1 │
│ 3 │
└───┘
```

Selecionando dados com uma direção de ordenação diferente:

```sql theme={null}
SELECT DISTINCT a FROM t1 ORDER BY b DESC;
```

```text theme={null}
┌─a─┐
│ 3 │
│ 1 │
│ 2 │
└───┘
```

A linha `2, 4` foi descartada antes da ordenação.

Leve essa particularidade da implementação em conta ao escrever consultas.

<div id="null-processing">
  ## Processamento de NULL
</div>

`DISTINCT` funciona com [NULL](/pt-BR/reference/syntax#null) como se `NULL` fosse um valor específico e `NULL==NULL`. Em outras palavras, nos resultados de `DISTINCT`, diferentes combinações com `NULL` aparecem apenas uma vez. Isso difere do processamento de `NULL` na maioria dos outros contextos.

<div id="alternatives">
  ## Alternativas
</div>

É possível obter o mesmo resultado aplicando [GROUP BY](/pt-BR/reference/statements/select/group-by) ao mesmo conjunto de valores especificado na cláusula `SELECT`, sem usar nenhuma função de agregação. No entanto, há algumas diferenças em relação à abordagem com `GROUP BY`:

* `DISTINCT` pode ser aplicado junto com `GROUP BY`.
* Quando [ORDER BY](/pt-BR/reference/statements/select/order-by) é omitido e [LIMIT](/pt-BR/reference/statements/select/limit) é definido, a consulta para de ser executada imediatamente após a leitura do número necessário de linhas distintas.
* Os blocos de dados são produzidos à medida que são processados, sem esperar que toda a consulta termine de ser executada.
