Ваши два запроса очень разные.Первый запрос:
select e.lastname, e.firstname
from employees e
where e.officecode in (select o.officecode from offices o where o.country = 'USA');
(обратите внимание, что я уточнил все имена столбцов.)
Это позволяет сотрудникам, где соответствующий офис находится в США.
Этозапрос совершенно другой:
select e.lastname, e.firstname
from employees e
where exists (select o.officecode from offices o where o.country = 'USA');
Это запрос типа "все или ничего".Возвращает всех сотрудников, если любой офис находится в США.В противном случае он ничего не возвращает.
Чтобы быть эквивалентным первому запросу, вам необходимо условие корреляция .Это связывает внутренний запрос с внешним запросом:
select e.lastname, e.firstname
from employees e
where exists (select 1
from offices o
where o.officecode = e.officecode and o.country = 'USA'
);
С этим изменением два запроса должны давать идентичные результаты.