Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Consultas com relacionamentos

Gostaria de ver sobre a aula de relacionamentos, onde fiz a pesquisa com o JOIN diferente da proposta pelo professor e carregou um resultado igual:

O script proposto pelo professor era:

SELECT * FROM aluno JOIN aluno_curso ON aluno_curso.aluno_id = aluno.id

Acabei fazendo o script diferente e carregou o mesmo resultado:

SELECT * FROM aluno JOIN aluno_curso ON aluno_id = aluno.id

Posteriormente, fiz o script que mostrou dados diferentes, trazendo o aluno Diogo em mais de um curso sendo que ao pesquisar em quais cursos ele está, o mesmo está em apenas um.

SELECT * FROM aluno JOIN aluno_curso ON aluno_id = aluno.id JOIN curso ON curso_id = aluno_id

2 respostas
solução!

Oi Jorge,

Vamos analisar suas consultas e esclarecer os pontos de dúvida 🤔.

Na primeira consulta, SELECT * FROM aluno JOIN aluno_curso ON aluno_curso.aluno_id = aluno.id, você está explicitamente referenciando a coluna aluno_id da tabela aluno_curso.

Já na sua variação, SELECT * FROM aluno JOIN aluno_curso ON aluno_id = aluno.id, o PostgreSQL entende que aluno_id se refere à coluna da tabela aluno_curso devido ao contexto do JOIN.

Ambas as consultas retornam o mesmo resultado porque o PostgreSQL consegue inferir a qual tabela a coluna aluno_id pertence.

O problema surge na terceira consulta: SELECT * FROM aluno JOIN aluno_curso ON aluno_id = aluno.id JOIN curso ON curso_id = aluno_id.

Aqui, você está usando aluno_id para relacionar tanto aluno com aluno_curso quanto aluno_curso com curso.

O correto seria usar curso.id para relacionar com aluno_curso.curso_id, pois a coluna curso_id na tabela aluno_curso é que faz a ligação com a tabela curso.

A consulta deveria ser: SELECT * FROM aluno JOIN aluno_curso ON aluno_curso.aluno_id = aluno.id JOIN curso ON curso.id = aluno_curso.curso_id.

Para saber mais: Documentação oficial do PostgreSQL sobre JOIN.

Continue praticando e explorando as possibilidades do SQL 💪!

Beleza Luis! Com o auxílio da tua explicação e da Luri, consegui compreender a sintaxe correta, tinha realmente ficado na dúvida sobre a funcionalidade do "ponto" entre as tabelas/colunas, onde agora ficou claro que a referência é entre a "tabela.coluna" que vai ser feito o JOIN.

Obrigado!