Artigos de Tecnologia e Negócios

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

Guilherme Silveira
Guilherme Silveira

Quando vamos usar count no banco de dados nos deparamos com várias opções do SQL, conheça as diferenças entre as várias possibilidades de contar linhas de tabela com count em um banco de dados.

Como um exemplo, 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

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 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?

Fica agora o desafio: qual o resultado da SQL a seguir?


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

Gostou dessas práticas e dicas de SQL? Então confira também os cursos que temos na Alura para a SQL e banco de dados! ;)

Artigos de Tecnologia e Negócios