Voltar para a lista de artigos Artigos
5 minutos de leitura

Qual é a diferença entre UNIQUE e DISTINCT em SQL?

Usamos as palavras UNIQUE e DISTINCT de forma única e distinta no nosso dia-a-dia. Entretanto, estas palavras desempenham papéis muito diferentes em SQL. Vamos descobrir o que há de tão diferente nelas e como podemos usá-las em SQL.

Apesar de as palavras únicas e distintas serem sinônimos, elas cobrem coisas muito diferentes em SQL. A palavra-chave UNIQUE em SQL desempenha o papel de restrição de banco de dados; ela garante que não há valores duplicados armazenados em uma coluna específica ou em um conjunto de colunas. Por outro lado, a palavra-chave DISTINCT é usada na declaração SELECT para buscar linhas distintas de uma tabela.

O melhor lugar para aprender sobre SQL e bancos de dados é LearnSQL.com.br. É uma plataforma on-line projetada para ajudá-lo a dominar todos os tópicos do banco de dados. Ela oferece mais de 30 cursos SQL, incluindo um abrangente SQL de A a Z track com o completo caminho de aprendizado SQL interativo ou Criar estrutura de banco de dados que lhe ensinará sobre restrições de banco de dados como UNIQUE.

Vamos dar uma olhada mais de perto nas palavras-chave UNIQUE e DISTINCT em SQL.

A palavra-chave DISTINCT em SQL

A palavra-chave DISTINCT em SQL é usada com a declaração SELECT. Ao usar SELECT imediatamente seguido da palavra-chave DISTINCT, todas as linhas duplicadas são removidas do conjunto de resultados.

Vamos ver um exemplo de DISTINCT em ação.

Nos é dado o Cars tabela, que contém as informações de marca e modelo de alguns carros:

IdBrandModelProductionYear
AQ16AudiQ72011
FK19FordKuga2019
JC07JeepCherokee2012
JW15JeepWrangler2015
TS14TeslaModel S2014
TY20TeslaModel Y2020

Vamos fazer uma simples declaração SELECT para que todas as marcas de carros sejam produzidas após 2011:

SELECT Brand 
FROM Cars 
WHERE ProductionYear > 2011;

O resultado da consulta acima é o seguinte.

Brand
Ford
Jeep
Jeep
Tesla
Tesla

Como você pode ver, temos valores duplicados para Jeep e Tesla. E se quisermos um único registro para cada valor? Usamos a palavra-chave DISTINCT:

SELECT DISTINCT Brand 
FROM Cars 
WHERE ProductionYear > 2011;

E o resultado é...

Brand
Ford
Jeep
Tesla

Agora você vê como é fácil e conveniente usar a palavra-chave DISTINCT.

Para obter uma visão mais profunda da palavra-chave DISTINCT em SQL, confira nosso artigo sobre Qual é o papel do DISTINCT em SQL?

A palavra-chave UNIQUE em SQL

A palavra-chave UNIQUE em SQL marca uma de suas restrições de banco de dados. Ao utilizar a restrição UNIQUE em uma coluna ou conjunto de colunas, é possível evitar que valores duplicados sejam armazenados nesta coluna ou conjunto (ou seja, a combinação dos valores das colunas deve ser única, embora cada valor possa ocorrer várias vezes na mesma coluna).

Vejamos a restrição UNIQUE em ação. Vamos criar uma Person tabela que armazena o nome, o número da previdência social e a nacionalidade de uma pessoa.

CREATE TABLE Person (
	RowId INTEGER PRIMARY KEY,
	FirstName varchar(50),
	LastName varchar(50),
	SSN varchar(20) UNIQUE,
	Nationality varchar(30)
);

Aqui, a coluna SSN deve armazenar apenas valores não duplicados; portanto, há uma palavra-chave UNIQUE na definição desta coluna, o que impõe a restrição UNIQUE a ela.

Para mais prática com a criação de tabelas e projeto de banco de dados, confira nosso track on Creating Database Structure. Ela inclui as bases de criação de tabelas, tipos de dados SQL, restrições, e muito mais. E para alguma visão sobre a trilha, leia este artigo.

Agora, vamos inserir alguns valores na tabela de Person mesa.

INSERT INTO Person VALUES (1, 'John', 'Black', '321456987123', 'American');
INSERT INTO Person VALUES (2, 'Isabella', 'Sanchez', '987456345123', 'Spanish');
INSERT INTO Person VALUES (3, 'Klaus', 'Schmidt', '987456345123', 'German');

Recebemos um erro na terceira declaração INSERT. Por quê? Porque uma restrição UNIQUE foi definida na coluna SSN; portanto, o mesmo valor não pode aparecer duas vezes na coluna SSN. Tanto Isabella quanto Klaus têm o mesmo valor SSN, então recebemos uma mensagem de erro. Não obedecemos as regras definidas pela restrição UNIQUE.

Se mudarmos a última declaração INSERT para...

INSERT INTO Person VALUES (3, 'Klaus', 'Schmidt', '876456345123', 'German');

... é aceito na mesa. Após executar todas as três declarações INSERT, incluindo a terceira declaração corrigida, o Person tabela tem este aspecto:

RowIdFirstNameLastNameSSNNationality
1JohnBlack321456987123American
2IsabellaSanchez987456345123Spanish
3KlausSchmidt876456345123German

A restrição UNIQUE impede qualquer INSERTs ou UPDATEs a uma tabela que resulte em valores duplicados na coluna ou conjunto de colunas que implemente a restrição.

Portanto, a tabela abaixo viola a restrição UNIQUE definida na coluna SSN.

RowIdFirstNameLastNameSSNNationality
1JohnBlack321456987123American
2IsabellaSanchez987456345123Spanish
3KlausSchmidt987456345123German

...e esta tabela obedece à restrição UNIQUE definida na coluna SSN.

RowIdFirstNameLastNameSSNNationality
1JohnBlack321456987123American
2IsabellaSanchez987456345123Spanish
3KlausSchmidt876456345123German

Você pode definir a restrição UNIQUE durante a criação da tabela, como foi mostrado aqui, ou depois que a tabela for criada. A restrição UNIQUE também pode ser modificada ou removida posteriormente. Para saber como fazer tudo isso, consulte o artigo O que é uma restrição única em SQL? Também oferecemos um curso interativo sobre Restrições SQL para ajudá-lo a compreender as diferentes restrições que a SQL disponibiliza.

Colocando tudo junto: UNIQUE vs. DISTINTO em SQL

Definimos as palavras-chave UNIQUE e DISTINCT. Mas quais são as diferenças reais entre elas?

A palavra-chaveUNIQUE marca uma restrição de banco de dados e é definida durante a criação da tabela ou posteriormente em uma coluna específica ou em um conjunto de colunas. A palavra-chaveDISTINCT é usada enquanto se busca o conjunto de resultados do banco de dados. Ela segue diretamente apalavra-chaveSELECT quando queremos ter certeza de que todas as linhas do conjunto de resultados contêm valores distintos ou um conjunto distinto de valores.

Sabemos que é sempre bom ter o máximo de prática possível, por isso preparamos uma Curso de Práticas em SQL que o ajudará a aprender e praticar todas as diferentes características oferecidas pelo SQL. Para se sentir motivado, confira nosso artigo sobre o Curso de Práticas em SQL.

Boa sorte!