Essa é uma pergunta muito boa, então decidi escrever um artigo muito detalhado sobre esse assunto no meu blog.
Modelo de tabela de banco de dados
Vamos supor que temos as duas tabelas a seguir em nosso banco de dados, que formam uma relação de tabela um para muitos.

A studenttabela é o pai e o student_gradeé a tabela filho, pois tem uma coluna de chave estrangeira student_id referenciando a coluna de chave primária id na tabela de alunos.
O student tablecontém os dois registros a seguir:
| id | first_name | last_name | admission_score |
|
| 1 | Alice | Smith | 8.95 |
| 2 | Bob | Johnson | 8.75 |
E a student_gradetabela armazena as notas que os alunos receberam:
| id | class_name | grade | student_id |
|
| 1 | Math | 10 | 1 |
| 2 | Math | 9.5 | 1 |
| 3 | Math | 9.75 | 1 |
| 4 | Science | 9.5 | 1 |
| 5 | Science | 9 | 1 |
| 6 | Science | 9.25 | 1 |
| 7 | Math | 8.5 | 2 |
| 8 | Math | 9.5 | 2 |
| 9 | Math | 9 | 2 |
| 10 | Science | 10 | 2 |
| 11 | Science | 9.4 | 2 |
SQL EXISTS
Digamos que queremos todos os alunos que receberam nota 10 na aula de matemática.
Se estivermos interessados apenas no identificador do aluno, podemos executar uma consulta como esta:
SELECT
student_grade.student_id
FROM
student_grade
WHERE
student_grade.grade = 10 AND
student_grade.class_name = 'Math'
ORDER BY
student_grade.student_id
Mas, o aplicativo está interessado em exibir o nome completo de a student, não apenas o identificador, portanto, também precisamos das informações da studenttabela.
Para filtrar os studentregistros que têm nota 10 em matemática, podemos usar o operador EXISTS SQL, assim:
SELECT
id, first_name, last_name
FROM
student
WHERE EXISTS (
SELECT 1
FROM
student_grade
WHERE
student_grade.student_id = student.id AND
student_grade.grade = 10 AND
student_grade.class_name = 'Math'
)
ORDER BY id
Ao executar a consulta acima, podemos ver que apenas a linha Alice está selecionada:
| id | first_name | last_name |
|
| 1 | Alice | Smith |
A consulta externa seleciona as studentcolunas de linha que estamos interessados em devolver ao cliente. No entanto, a cláusula WHERE está usando o operador EXISTS com uma subconsulta interna associada.
O operador EXISTS retorna verdadeiro se a subconsulta retornar pelo menos um registro e falso se nenhuma linha for selecionada. O mecanismo de banco de dados não precisa executar a subconsulta inteiramente. Se um único registro for correspondido, o operador EXISTS retornará verdadeiro e a outra linha de consulta associada será selecionada.
A subconsulta interna é correlacionada porque a coluna student_id da student_gradetabela é comparada com a coluna id da tabela externa de aluno.