Boa noite pessoal. Eu montei um esquema para tentar entender um pouco mais das relações das tabelas do sql e para tentar melhorar um pouco meu entendimento no curso. Não tenho como postar aqui o meu rascunho, mas talvez vocês possam me ajudar. Navegando pelas relações das tabelas para responder o exercício que indaga a respeito da média das notas por curso eu acabei chegando em duas querys diferentes que trazem resultados diferentes. Fiquei um tempo tentando entender, mas sem sucesso. Posto abaixo as duas e se alguém puder esclarece-las pra mim eu agradeço.
Caminho 1) Nota > Resposta > Aluno > Matricula > Curso
select c.nome, AVG(n.nota) from nota n
join resposta r on r.id = n.resposta_id
join aluno a on a.id = r.aluno_id
join matricula m on m.aluno_id = a.id
join curso c on c.id = m.curso_id
group by c.nome
Produz como resultado:
nome (Nenhum nome de coluna)
C# e orientação a objetos 5.740740
Desenvolvimento mobile com Android 4.857142
Desenvolvimento web com VRaptor 6.250000
Scrum e métodos ágeis 5.777777
SQL e banco de dados 6.272727
Caminho 2) Nota > Resposta > Exercicio > Secao > Curso
select c.nome, AVG(n.nota) from nota n
join resposta r on r.id = n.resposta_id
join exercicio e on e.id = r.exercicio_id
join secao s on s.id = e.secao_id
join curso c on c.id = s.curso_id
group by c.nome
Produz:
nome (Nenhum nome de coluna)
C# e orientação a objetos 4.857142
Desenvolvimento web com VRaptor 8.000000
Scrum e métodos ágeis 5.777777
SQL e banco de dados 6.100000
Percebi que uma das diferenças consiste no fato de executar um join entre as tabelas de Aluno e Resposta. O resultado desse join nos traz todas as respostas. Me parece que o sql não filtra, apesar de não cometer nenhuma falha. Mesmo assim, peço um norte a respeito de onde falha o meu entendimento e saber onde posso ler mais para sanar minha dúvida!
Desde já agradeço.