Agora que percebi, vc deve contar pelo codigo tanto do produto quanto da bebida, e não pelo cod_fabricante de cada um (o cod_fabricante serve apenas para juntar as tabelas)…
select f.nome,count(b.codigo),count(p.codigo)
from bebidas as b
inner join fabricantes as f on f.codigo=b.cod_fabricante
inner join produtos as p on f.codigo=p.cod_fabricante
group by f.nome;
Isso na teoria não deveria duplicar… agora se mesmo assim contar errado, vc precisa ver se todos os produtos e bebidas possuem a mesma quantidade de fabricantes, caso o contrário precisará usar left e não inner join:
select f.nome,count(b.codigo),count(p.codigo)
from fabricantes as f
left join bebidas as b on b.cod_fabricante = f.codigo
left join produtos as p on p.cod_fabricante = f.codigo
group by f.nome;
Perceba que mudei a ordem das tabelas ok? isso afeta os joins, pesquise mais a respeito…
Dessa forma ele consegue contar corretamente apenas onde encontrar bebidas vinculadas ou produtos vinculados pegou?
Por exemplo, se na tabela de bebidas vc tem 10 para um fabricante X e na produtos vc tem 5 para o mesmo fabricante, com INNER ele vai contar 10 para cada 1, usando LEFT ele irá contar 10 pra um e 5 pra outro… espero ter conseguido te passar a lógica…