select count(*), count(1) e count(nome): a batalha dos counts de SQL

(Last Updated On: 31 de outubro de 2017)

Quantos produtos tem minha empresa mesmo?

select count(nome) from Produtos;
> 198

Mas…

select count(id) from Produtos;
> 200

Como assim? SQL pirou? De novo?

select id, nome from Produtos where nome is null;
> 190, null
> 196, null

Tã dã!!! O select count verifica o número de linhas não nulas dentro do count que você quer fazer! Se tinha nome nulo, não contou! Resultado? Zoou.

Muito cuidado com seus counts. Então o que devo contar? Se você quer contar valores não nulos, use o count(campo), como fizemos:

select count(nome) from Produtos;
> 198

Mas se quer contar todos, count estrela nele pra não correr risco, ele vai contar o número de registros retornados, independentemente de valores nulos:

select count(*) from Produtos;
> 200

E o bambu? Digo, e o 1? Pra que o count(1)?

select count(1) from Produtos;
> 200

O count(1) seria uma alternativa ao count(algum_campo) pois você teria certeza que nunca seria nulo, e que não precisaria ler o campo… acontece que fica bizarro select count(1), e você quer ter código bizarro ou código legível?

Como disse, eu prefiro contar estrelas… e você, conta estrelas conta um ou conta id?

ps: Boa prática sugerida pelo dev do Alura, Caio Incau!
Fica agora o desafio: qual o resultado da SQL a seguir?

select count(nome) from Produtos where nome is null;
> ??????

Responda já! Tô esperando.

Outras pegadinhas de count? Conta aí!

Gostou dessas práticas e dicas de SQL? Então confira também os cursos que temos na Alura para a Carreira Inicando com SQL e MySQL! 😉

FIQUE POR DENTRO

Tech Education Leader no Alura

Próximo ArtigoCentralizando um elemento com CSS