Melhor resposta
Já existem algumas boas respostas aqui, mas infelizmente, alguns estão errados.
O 1 em COUNT (1) é apenas uma expressão constante literal, não tem nada a ver com a coluna 1 da tabela. Terá a mesma resposta que COUNT (*), e tem o mesmo plano de execução. A consulta contará as linhas no menor índice não clusterizado para minimizar o I / O necessário.
COUNT (Col) (para uma coluna anulável) será encontrado contando as linhas no menor índice que inclui Col, se não estiver em nenhum índice, será necessária uma varredura de tabela. Se Col estiver na chave ou índice clusterizado, ele também fará parte de todos os outros índices, portanto, o menor índice não clusterizado será verificado em vez de uma verificação de tabela clusterizada.
Se a coluna de destino for NÃO NULO, então COUNT (Col) é idêntico a COUNT (*) e será novamente encontrado examinando o menor índice não agrupado, mesmo se Col não estiver em nenhum índice.
Essas declarações são baseadas em planos de execução estimados de várias consultas em um servidor SQL 2014, os otimizadores de consulta para versões mais antigas ou mais recentes podem funcionar de maneira diferente. Você pode descobrir que aprender a ler planos de execução pode ensinar muito mais sobre como as consultas são executadas do que tentar descobrir qual resposta postada aqui é mais precisa.
Resposta
O parâmetro para a função COUNT é uma expressão que deve ser avaliada para cada linha. A função COUNT retorna o número de linhas para as quais a expressão é avaliada como um valor não nulo. (* é uma expressão especial que não é avaliada, ela simplesmente retorna o número de linhas.)
Existem dois modificadores adicionais para a expressão: ALL e DISTINCT. Eles determinam se as duplicatas são descartadas. Como ALL é o padrão, seu exemplo é o mesmo que count (ALL 1), o que significa que as duplicatas são retidas.
Uma vez que a expressão “1” é avaliada como não nula para cada linha, e como você não estão removendo duplicatas, COUNT (1) deve sempre retornar o mesmo número que COUNT (*).