1
resposta

Como funciona o EXISTS?

Tomando o exemplo:

SELECT ALUNO.NOME FROM ALUNO WHERE EXISTS(
        SELECT MATRICULA.ID FROM MATRICULA 
        WHERE MATRICULA.ALUNO_ID = ALUNO_ID);

Este trecho pega todos alunos que constam na seleção de matricula. Minha duvida é a seguinte.. se na seleção mais de dentro eu consigo extrair apenas o ID da MATRICULA, como que a partir dessa informação eu consigo saber os alunos(MATRICULA.ALUNO_ID) que constam em cada MATRICULA.ID, esta informação não deveria ser obtida através de um select de ALUNO_ID ? Quando uso o SELECT mesmo pegando apenas uma coluna (matricula.id) o Oracle tem acesso a todas colunas da tabela? Como por exemplo,a partir de cada matricula.id pode acessar aluno_id e entende que matricula.aluno_id é a foreign key de aluno.id..

1 resposta

Victor,

A clausula exists faz basicamente a mesma coisa que o inner join neste caso. Em resumo o oracle faz o seguinte:

seleciona os nomes de todos os alunos que aluno.id seja igual a matricula.aluno_id;

Lembrado que o correto seria:

SELECT ALUNO.NOME FROM ALUNO WHERE EXISTS( SELECT MATRICULA.ID FROM MATRICULA WHERE MATRICULA.ALUNO_ID = ID);