Diferença entre Select Unique e Select Distinct

145

Eu pensei que eram sinônomos, mas escrevi o seguinte no Microsoft SQL:

Select Unique col from 
     (select col from table1 union select col from table2) alias

E falhou. Alterando para

Select Distinct col from 
     (select col from table1 union select col from table2) alias

consertou. Alguém pode explicar?

user42712
fonte

Respostas:

169

SELECT UNIQUEé uma sintaxe antiga suportada pelo sabor do SQL da Oracle. É sinônimo de SELECT DISTINCT.

Use SELECT DISTINCTporque esse é o SQL padrão e SELECT UNIQUEnão é o padrão, e em marcas de banco de dados que não sejam Oracle, SELECT UNIQUEtalvez não sejam reconhecidas.

Bill Karwin
fonte
113

Unique é uma palavra-chave usada na diretiva Create Table () para indicar que um campo conterá dados exclusivos, geralmente usados ​​para chaves naturais, chaves estrangeiras etc.

Por exemplo:

Create Table Employee(   
    Emp_PKey Int Identity(1, 1) Constraint PK_Employee_Emp_PKey Primary Key,  
    Emp_SSN Numeric Not Null Unique,  
    Emp_FName varchar(16),   
    Emp_LName varchar(16) 
)

ou seja, o número de segurança social de alguém provavelmente seria um campo exclusivo na sua tabela, mas não necessariamente a chave primária.

Distinct é usado na instrução Select para notificar a consulta que você deseja que apenas os itens exclusivos sejam retornados quando um campo contém dados que podem não ser exclusivos.

Select Distinct Emp_LName
From Employee

Você pode ter muitos funcionários com o mesmo sobrenome, mas deseja apenas cada sobrenome diferente.

Obviamente, se o campo que você está consultando tiver dados exclusivos, a palavra-chave Distinct se tornará supérflua.

BenAlabaster
fonte
2
Você pode querer que os números de previdência social sejam únicos, mas não são. Por exemplo: dailyfinance.com/2010/08/12/…
17/09/2015
18

selecionar exclusivo não é uma sintaxe válida para o que você está tentando fazer

você deseja usar selecionar distinto ou selecionar distinctrow

E, na verdade, você nem precisa de um distinto / distinto no que está tentando fazer. Você pode eliminar duplicatas escolhendo os parâmetros de instrução de união apropriados.

a consulta abaixo por si só fornecerá valores distintos

select col from table1 
union 
select col from table2

se você quisesse duplicatas, teria que fazer

select col from table1 
union all
select col from table2
mson
fonte
1
se não estou errado, a Oracle permite que você diga select unique..., embora eu prefira seguir os padrões.
asgs
3

Somente no Oracle =>

SELECT DISTINCTe SELECT UNIQUEse comportar da mesma maneira. Enquanto DISTINCT é o padrão ANSI SQL, UNIQUE é uma instrução específica do Oracle.

Em outros bancos de dados (como sql-server no seu caso) =>

SELECT UNIQUEé uma sintaxe inválida. UNIQUEé a palavra-chave para adicionar restrição exclusiva na coluna.

SELECT DISTINCT

Somnath Muluk
fonte
0
  1. Unique era a sintaxe antiga, enquanto Distinct é a nova sintaxe, que agora é o sql padrão.
  2. Unique cria uma restrição de que todos os valores a serem inseridos devem ser diferentes dos outros. Um erro pode ser testemunhado se alguém tentar inserir um valor duplicado. Resultados distintos na remoção das linhas duplicadas durante a recuperação de dados.
  3. Exemplo: SELECT DISTINCT names FROM student;

    CRIAR TABELA Pessoas (Id varchar NÃO NULL ÚNICO , Nome varchar (20));

aashna mahajan
fonte