Я бы предложил изучить реляционную алгебру (как указал Мчл). Это самая важная концепция, которая вам нужна, если вы хотите серьезно относиться к оптимизации запросов и правильному проектированию баз данных.
Однако я предложу уродливый метод грубой силы, который поможет вам обеспечить правильные результаты, если у вас достаточно данных для тестирования: создайте представления обеих версий (для упрощения управления сравнениями) и сравните результаты. Я имею в виду что-то вроде
create view original as select xxx yyy zzz;
create view new as select xxx yyy zzz;
-- If the amount differs something is quite obviously very wrong
select count(*) from original;
select count(*) from new;
-- What is missing from the new one?
select *
from original o
where not exists (
select *
from new n
where o.col1=n.col2 and o.col2=n.col2 --and so on
);
-- Did something extra appear?
select *
from new o
where not exists (
select *
from old n
where o.col1=n.col2 and o.col2=n.col2 --and so on
)
Также, как отмечают другие в комментариях, вы можете передать оба запроса оптимизаторам продукта, с которым вы работаете. Большую часть времени вы получаете что-то, что можно проанализировать с людьми, составлять чертежи путей выполнения с влиянием подзапросов на производительность и т. Д. Это чаще всего делается с помощью чего-то вроде
explain plan for
select *
from ...
where ...
etc