[Dúvida SQL] Retornar o valor 0 com comando COUNT

Independente de INNER ou LEFT, o seu problema na verdade não é esse (pode ser que seja um outro problema, mas não o em questão), de qualquer maneira, se nada fosse encontrado, deveria retornar um 0.

Vi esse post procurando no google, não sei o que tem dentro porque não tenho acesso, mas pelo nome parece que pode te ajudar.

Três observações:

  • O LEFT JOIN dá prioridade a tabela do lado esquerdo no select. Existe também o RIGHT JOIN, para dar prioridade ao lado direito.

  • Se manter um INNER JOIN no meio da query, pode anular o efeito do LEFT/RIGHT join anterior.

  • Se colocar no WHERE alguma condição que dependa do lado sem prioridade, você também vai anular o efeito do LEFT/RIGHT join.

SELECT A.DESCRICAO, COALESCE(COUNT(AL.ID), 0) AS TOTAL
FROM ALUNOS AL 
    INNER JOIN CURSOS C ON C.ID = AL.CURSO
    INNER JOIN RESPOSTAS R ON R.ALUNO = AL.ID AND R.PERGUNTA = 2 
    INNER JOIN RESPOSTAS R1 ON R1.ALUNO = AL.ID AND R1.PERGUNTA = 1 
    INNER JOIN ALTERNATIVAS A ON R.ALTERNATIVA = A.ID 
    INNER JOIN ALTERNATIVAS A1 ON R1.ALTERNATIVA = A1.ID 
WHERE AL.ANO = 2012 AND C.CAMPUS = 5
GROUP BY A.LETRA, A1.LETRA 
ORDER BY A.LETRA, A1.LETRA;

Resultado obtido desse SELECT:

17 anos -> 6
18 anos -> 8
18 anos -> 14
19 anos -> 3
19 anos -> 4
20 anos -> 2
20 anos -> 5
21 anos -> 3
21 anos -> 4
22 a 24 anos -> 2
22 a 24 anos -> 1
25 a 29 anos -> 4
25 a 29 anos -> 8
30 anos ou mais -> 2
30 anos ou mais -> 6

Resultado ESPERADO (pois a pergunta 2 tem oito alternativas e a pergunta 1 tem duas):

[color=red]17 anos -> 0[/color]
17 anos -> 6
18 anos -> 8
18 anos -> 14
19 anos -> 3
19 anos -> 4
20 anos -> 2
20 anos -> 5
21 anos -> 3
21 anos -> 4
22 a 24 anos -> 2
22 a 24 anos -> 1
25 a 29 anos -> 4
25 a 29 anos -> 8
30 anos ou mais -> 2
30 anos ou mais -> 6

Vou fazer uns testes aqui então com RIGHT, etc (acredito que o conteúdo da cláusula WHERE não dará problema)