COUNT() é uma função de agregação que geralmente é combinada com um GROUP BY cláusula. curdate() é uma função de data que gera a data atual. Apenas o MySQL (até onde eu sei) permite essa sintaxe sem usar o
GROUP BY cláusula. Como você não o forneceu, COUNT(*) contará a quantidade total de linhas na tabela e o owner coluna será selecionada aleatoriamente/padrão do otimizador/por índices. Esta deve ser sua consulta:
select owner, count(*)
from pet
group by owner;
Que diz ao otimizador para contar o total de linhas, para cada proprietário.
Quando nenhuma cláusula group by for mencionada - as funções de agregação são aplicadas em todos os dados da tabela.
EDITAR: Uma contagem que será aplicada em cada linha não pode ser feita normalmente com
COUNT() e geralmente usado com uma função analítica -> COUNT() OVER(PARTITION...) que infelizmente não existe no MySQL. Sua outra opção é fazer uma JOIN/CORRELATED QUERY para esta coluna adicional. Outra edição: Se você quiser a contagem total ao lado de cada proprietário, use uma subconsulta:
SELECT owner,
(SELECT COUNT(*) FROM pet) as cnt
FROM pet