Как предполагает Олли, единственный точный способ определить, какой из двух запросов является более эффективным, - это сравнить два подхода с использованием ваших данных, поскольку производительность этих двух альтернатив, вероятно, будет зависеть от объемов данных, структур данных, от того, какие индексы являютсяв настоящее время и т. д.
Как правило, два отправленных вами запроса будут давать разные результаты.Если вам не гарантировано, что каждая строка в outertable
имеет ровно одну соответствующую строку в innertable
, два запроса вернут разное количество строк.Первый запрос вернет строку для каждой строки в outertable
с NULL в качестве первого столбца, если в innertable
нет соответствующей строки.Второй запрос ничего не даст, если в innertable
нет подходящей строки.Аналогично, если в innertable
имеется несколько совпадающих строк для какой-либо конкретной строки в outertable
, первый запрос вернет ошибку, а второй запрос вернет несколько строк для этой строки в outertable
.
Если вы уверены, что два запроса возвращают идентичные наборы результатов в вашем конкретном случае, потому что вы можете гарантировать, что в innertable
есть ровно одна строка для каждой строки в outertable
(в этом случае ваши данные как минимум несколько страннымодель разделяет таблицы), второй вариант будет гораздо более естественным способом написания запроса и, следовательно, тот, для которого оптимизатор, скорее всего, найдет более эффективный план.