With the IN operator, your query returns movies that have any of these directors.
You have to check for each director separately:
SELECT *
FROM Movie
WHERE movie_id IN (SELECT movie_id
FROM Direct
WHERE director_id = (SELECT director_id
FROM Directors
WHERE name = 'Clint Eastwood'))
AND movie_id IN (SELECT movie_id
FROM Direct
WHERE director_id = (SELECT director_id
FROM Directors
WHERE name = 'Al Pachino'))
Alternatively, use a compound query to construct a list of movie IDs for both directors:
SELECT *
FROM Movie
WHERE movie_id IN (SELECT movie_id
FROM Direct
WHERE director_id = (SELECT director_id
FROM Directors
WHERE name = 'Clint Eastwood')
INTERSECT
SELECT movie_id
FROM Direct
WHERE director_id = (SELECT director_id
FROM Directors
WHERE name = 'Al Pachino'))
Alternatively, get all records for these two directors from the Direct
table, and then group by the movie to be able to count the directors per movie; we need to have two left:
SELECT *
FROM Movie
WHERE movie_id IN (SELECT movie_id
FROM Direct
WHERE director_id IN (SELECT director_id
FROM Directors
WHERE name IN ('Clint Eastwood',
'Al Pachino')
GROUP BY movie_id
HAVING COUNT(*) = 2)