2
respostas

Então não é possível usar o distinct quando temos uma chave primária?

Então não é possível usar o distinct quando temos uma chave primária?

2 respostas

Oi Aline tudo bem?

Você consegue usar o distinct para tabelas com chave primária sim.

Imagine que eu tenha uma tabela das placas de carro do Brasil. Onde os campos sejam: placa (chave primária), nome_do_dono, cpf.

Se eu dou SELECT DISTINCT PLACA, NOME_DO_DONO, CPF FROM PLACAS. O resultado é igual a SELECT * FROM PLACAS pois todas as placas já são distintas.

Mas eu posso fazer SELECT DISTINCT NOME_DO_DONO, CPF FROM PLACAS. Eu vou mostrar no resultado o nome do dono do carro e seu cpf. Mas apenas uma linha por pessoa.

Ao contrário se eu fazer SELECT NOME_DO_DONO, CPF FROM PLACAS. Nesse caso repetiria a linha caso uma pessoa tivesse mais de um carro.

Espero ter ajudado!!!

O problema não é o id, mas a construção da consulta, veja os exemplos de uma consulta, conforme eu mudo a forma que faço a consulta o resultado muda, o distinct só funciona se todos os campos estiverem com o dados iguais, veja os exemplos abaixo:

create table teste (id int, nome varchar (50), idade int);
truncate table teste;

insert into teste (id, nome, idade) values(1,'Maria',10);
insert into teste (id, nome, idade) values(2,'Joao',10);
insert into teste (id, nome, idade) values(3,'Maria',11);
insert into teste (id, nome, idade) values(4,'Carla',10);
insert into teste (id, nome, idade) values(5,'Maria',10);

select distinct nome from teste;

Resultado:
Carla
Maria
Joao

select distinct id, nome, idade from teste;

Resultado:

1    Maria    10
3    Maria    11
2    Joao    10
4    Carla    10
5    Maria    10

select distinct nome, idade from teste

resultado:

Maria    10
Maria    11
Joao    10
Carla    10

Caso seja uma consulta usando GROUP BY você também pode ter problemas e ter que mudar a construção da consulta.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software