A instrutora na aula "filtrando informações dos proprietários" fez o seguinte código:
SELECT p.nome AS nome_proprietario, COUNT(h.hospedagem_id) AS total_hospedagens_ativas FROM proprietarios p JOIN hospedagens h ON p.proprietario_id = h.proprietario_id WHERE h.ativo = 1 GROUP BY p.nome ORDER BY total_hospedagens_ativas DESC LIMIT 10;
Eu achava que o resultado desse código da instrutora deveria ser equivalente ao resultado do seguinte código:
SELECT proprietario_id, COUNT(hospedagem_id) AS qtda FROM hospedagens WHERE ativo = 1 GROUP BY proprietario_id ORDER BY proprietario_id DESC LIMIT 10;
Mas os resultados são diferentes.
No segundo código está retornando na coluna "qtda" SOMENTE valores iguais a 1.
Já no primeiro código, da instrutora, na na coluna "total_hospedagens_ativas" é retornado valores diferentes de 1.
Não estou conseguindo entender porque isso ocorre. Pra mim é claro que a coluna "qtda" do segundo código deveria retornar os mesmos valores da coluna "total_hospedagens_ativas" do código da instrutora.
Na tabela hospedagens existe a coluna proprietario_id. Nesse coluna deveria vir valores repetidos porque o código da instrutora retornou valores repetidos. Mas não vem valores repetidos, porque nada foi retornado após o uso do seguinte código:
SELECT proprietario_id, COUNT() AS repeticoes FROM hospedagens GROUP BY proprietario_id HAVING COUNT() > 1;
A coluna proprietario_id da tabela hospedagens é do tipo VARCHAR, portanto tipo texto. Se tem valores iguais nessa coluna o código que conta esses valores deveria retornar algo, mas não retornou.
É estranho porque quando substitui, através do JOIN, proprietario_id pelo valor contido na coluna nome da tabela proprietarios, verifica-se a existência de nomes repetidos. Isso foi comprovado pelo código da instrutora.
A coluna "qtda" deveria retornar os mesmos valores da coluna "total_hospedagens_ativas", mas não está retornando.
poderiam explicar porque isso está acontecendo?