Estou dando minha resposta porque tenho dúvidas significativas sobre as outras respostas. Você precisa ter cuidado com os requisitos de filtro. Lembre-se, a cláusula where executa após suas junções . Portanto, se houver algum requisito de filtro na cláusula where que se referem à tabela não externa unida, você anulou (em muitas circunstâncias) sua junção externa. Então, pegando seu sql, parece que a solução mais simples é usar a junção adequada ou mover os nomes das tabelas adequadamente e, em seguida, mover as condições do filtro da cláusula where para a cláusula join.
SELECT f.faultcode, f.downloadtimeid, d.downloadtime, count(*) as faultcount
FROM download_time d
RIGHT OUTER JOIN fs_fault f ON
f.downloadtimeid = d.id
AND f.faultcode IN (1000,1100)
AND f.statusid IN(2, 4)
AND d.downloadtime BETWEEN '04/11/2011' AND '05/01/2012')
AND d.bunoid = 166501
GROUP BY d.bunoid, f.downloadtimeid, d.downloadtime, f.faultcode
Outra maneira que eu acredito que deveria ser equivalente é
SELECT f.faultcode, f.downloadtimeid, d.downloadtime, count(*) as faultcount
FROM download_time d
RIGHT OUTER JOIN fs_fault f ON
f.downloadtimeid = d.id
AND d.downloadtime BETWEEN '04/11/2011' AND '05/01/2012')
AND d.bunoid = 166501
WHERE
f.faultcode IN (1000,1100)
AND f.statusid IN(2, 4)
GROUP BY d.bunoid, f.downloadtimeid, d.downloadtime, f.faultcode
Como não importa estritamente onde estão os requisitos de filtro em fs_fault. (e seu mecanismo SQL vai mudar tudo de qualquer maneira).
Editar:Aqui está um SQLFiddle demonstrando a filtragem na cláusula join versus a cláusula where.