Trata-se de uma cláusula para eliminar repetições em consultas, considerando as colunas informadas na listagem de colunas do comando SELECT que contenham valores iguais como o mesmo registro.

Visão geral

Considere a tabela cliente (Tabela 1), responsável por armazenar informações dos clientes da loja Star Calçados.

id nome email data_cadastro
1 Fernando Braga comercial@mundial.com.br 2017-11-05
2 Luana Soares luanassa@yahoo.com.br 2016-05-05
3 Pedro Botelho comercial@mundial.com.br 2018-04-02
4 Marilia Gabriela mari_21@yahoo.com.br 2018-03-01
5 Bruno Henrique brunohrq@gmail.com 2016-05-05
6 Cintia Pereira cintiazinha@ig.com.br 2014-11-12
7 Raquel Tavares raquel-tav@terra.com.br 2014-11-11
Tabela 1. Estrutura da tabela cliente

Agora imagine que desejamos enviar uma mensagem de feliz natal para todos os clientes. Uma vez que existem clientes diferentes que utilizam o mesmo endereço de e-mail, a exemplo de Fernando Braga e Pedro Botelho, para evitar que esses clientes recebam o mesmo e-mail mais de uma vez é necessário deixar nesse relatório apenas um registro para cada e-mail.

Para resolver este problema podemos utilizar o DISTINCT. A consulta ficaria como no fragmento de código SQL abaixo:

SELECT
  DISTINCT email
FROM
  cliente

Este código removerá as ocorrências em duplicidade. O resultado da consulta pode ser visto na Tabela 2.

email
comercial@mundial.com.br
luanassa@yahoo.com.br
mari_21@yahoo.com.br
brunohrq@gmail.com
cintiazinha@ig.com.br
raquel-tav@terra.com.br
Tabela 2. Resultado da consulta utilizando o DISTINCT

Observe que no resultado acima, somente há uma ocorrência do email comercial@mundial.com.br, afinal, originalmente haviam dois registros com o mesmo e-mail, que foi removido deste resultado através da cláusula DISTINCT.

Sintaxe

SELECT
  [ DISTINCT ] [ coluna1, coluna2, … | * ]
FROM
  [ tabela ]

Na pratica

Exemplo 1

Agora, para este novo exemplo vamos adicionar um dado duplicado a tabela cliente (Tabela 1). Observe a nova estrutura abaixo, na (Tabela 3).

id nome email data_cadastro
1 Fernando Braga comercial@mundial.com.br 2017-11-05
2 Luana Soares luanassa@yahoo.com.br 2016-05-05
3 Pedro Botelho comercial@mundial.com.br 2018-04-02
4 Marilia Gabriela mari_21@yahoo.com.br 2018-03-01
5 Bruno Henrique brunohrq@gmail.com 2016-05-05
6 Cintia Pereira cintiazinha@ig.com.br 2014-11-12
7 Raquel Tavares raquel-tav@terra.com.br 2014-11-11
8 Raquel Tavares raquel-tav@terra.com.br 2014-11-11
Tabela 3. Estrutura da tabela cliente com um dado duplicado

Observe que na tabela acima que o cliente Raquel Tavares se repete, tanto no ID 7 quanto no ID 8. Se executarmos a query abaixo, conseguiremos remover as informações duplicadas:

SELECT
  DISTINCT nome,
           email
  FROM
  cliente

Observe que no trecho de código acima, selecionamos as colunas nome e e-mail utilizando a cláusula DISTINCT. O Resultado pode ser visto na (Tabela 4).

nome email
Fernando Braga comercial@mundial.com.br
Luana Soares luanassa@yahoo.com.br
Pedro Botelho comercial@mundial.com.br
Marilia Gabriela mari_21@yahoo.com.br
Bruno Henrique brunohrq@gmail.com
Cintia Pereira cintiazinha@ig.com.br
Raquel Tavares raquel-tav@terra.com.br
Tabela 4. Estrutura da tabela cliente sem o registro duplicado

Observe que o registro duplicado (Raquel Tavares) foi removido desta consulta. Isso foi possível porque ao utilizar o DISTINCT, o SQL foi capaz de perceber que esses dois registros se tratavam da mesma pessoa, podendo assim, ficar apenas uma informação no resultado.

Exemplo 2

Um dado importante é que ao utilizar o DISTINCT somente serão removidos da consulta os registros nos quais TODAS as colunas informadas estejam em duplicidade. Caso haja pelo menos um dado diferente entre as colunas informadas os registros serão interpretados como diferentes.

Na mesma estrutura da tabelas acima (Tabela 1), solicitaremos agora uma consulta de todas as colunas da tabela.

SELECT
  DISTINCT
    *
  FROM
  cliente

Observe que no trecho de código acima, solicitamos todas as colunas através do *. Dessa forma, a consulta deve verificar se há duplicidade nos registros, analisando todas as colunas.

O resultado da query pode ser visto abaixo na (Tabela 5)

id nome email data_cadastro
1 Fernando Braga comercial@mundial.com.br 2017-11-05
2 Luana Soares luanassa@yahoo.com.br 2016-05-05
3 Pedro Botelho comercial@mundial.com.br 2018-04-02
4 Marilia Gabriela mari_21@yahoo.com.br 2018-03-01
5 Bruno Henrique brunohrq@gmail.com 2016-05-05
6 Cintia Pereira cintiazinha@ig.com.br 2014-11-12
7 Raquel Tavares raquel-tav@terra.com.br 2014-11-11
8 Raquel Tavares raquel-tav@terra.com.br 2014-11-11
Tabela 5. Estrutura da tabela cliente após uma consulta por todas as colunas utilizando *

Observe que o resultado acima ainda apresenta dados duplicados, por exemplo os registros de ID 7 e 8. Esses registros não foram removidos porque ao verificar todas as colunas da consulta, o SQL reconheceu cada registro como único, afinal, não são todas as colunas que possuem dados iguais. A Coluna ID é quem foi responsável pela permanência dos dados duplicados, afinal, ela possui um valor diferente para cada item.

Exemplo 3

Para o próximo exemplo, considere a seguinte estrutura de tabelas, a tabela carro(Tabela 6), responsável por armazenar informações relacionadas aos carros cadastrados no banco de dados, e a tabale manutencao (Tabela 7), responsável por registrar a entrada de carros na manutenção.

ID modelo placa
1 Palio LTE-3245
2 Gol G3 OIU-2544
3 Gol G4 LKJ-9874
4 Voyage LKJ-6654
5 Citroen C3 JHG-7456
6 Onix LT PYP-9965
7 Onix LT LKJ-5547
8 Palio LKJ-9510
9 Palio LKJ-7896
10 Uno Mile HGF-9954
11 Uno Mile LLK-5542
12 Novo Uno GGF-2232
Tabela 6.Estrutura da tabela carro

ID id_carro Data
1 1 2018-05-04
2 4 2018-06-10
3 3 2018-01-20
4 7 2018-06-06
5 8 2017-09-12
6 6 2017-12-16
Tabela 7.Estrutura da tabela manutencao

Para selecionar todos os carros, mas trazendo apenas os modelos distintos, sem repetição, podemos utilizar a query abaixo:

SELECT
    DISTINCT modelo
FROM
    carro;

Observa que na Linha 2, pedimos pra trazer o modelo dos carros, mas com a cláusula distinct, o que produz o resultado que pode ser visto na tabela Tabela 8.

modelo
Palio
Gol G3
Gol G4
Voyage
Citroen C3
Onix
Tabela 7. Resultado da query

Confira também