Olá Josilene, tudo bem?
Só para complementar o que o Victor falou, quando você utiliza o COUNT(*) , ele irá contar o numero de registos(linhas), sem precisar acessar a tabela. Já quando utiliza o COUNT(id) ele ira contar os valores não nulos da coluna, precisando verificar cada linha individualmente. Como o ID é um campo obrigatório para preenchimento, em todas linhas estão preenchidas, o valor do COUNT(id) realmente sera o mesmo que o COUNT(*) .
Em relação a performance como o COUNT(*), não precisa acessar a tabela, ele é mais rápido que o COUNT(id) , você pode verificar essa performance com o seguinte comando:
EXPLAIN ANALYSE SELECT COUNT(id) FROM compras;
E depois executa o mesmo comando para o COUNT(*), para comparar os dois resultados.
Espero ter esclarecido a sua dúvida!