Общее правило заключается в том, что OUTER JOIN приводит к увеличению числа строк в наборе результатов на увеличение, , тогда как INNER JOINs приводит к уменьшению количества строк в наборе результатов на . Конечно, существует множество сценариев, где верно и обратное, но скорее всего это сработает, чем нет. Что вы хотите сделать для производительности, так это сохранить размер набора результатов (рабочего набора) как можно меньшим как можно дольше.
Поскольку оба объединения совпадают на первой таблице, изменение порядка не повлияет на точность результатов. Следовательно, вы, вероятно, хотите выполнить ВНУТРЕННЕЕ СОЕДИНЕНИЕ до ЛЕВОГО СОЕДИНЕНИЯ:
SELECT *
FROM TblA
INNER JOIN DifferentDbCatalog.dbo.TblC on TblA.ID = TblC.TblAID
LEFT JOIN freetexttable ( TblB, *, 'query' ) on TblA.ID = [Key]
На практике оптимизатор запросов должен быть достаточно умен, чтобы компилировать, чтобы использовать более быстрый вариант, независимо от того, какой порядок вы указали для объединений. Однако рекомендуется делать вид, что у вас тупой оптимизатор запросов, и что операции с запросами выполняются по порядку. Это помогает будущим сопровождающим определить потенциальные ошибки или предположения о характере таблиц.
Поскольку оптимизатор должен переписывать вещи, вероятно, этого недостаточно, чтобы полностью объяснить поведение, которое вы видите, поэтому вам все же захочется проверить план выполнения , используемый для каждого запроса и, возможно, добавить индекс, как предлагалось ранее. Это все еще хороший принцип для изучения.