Это известная «функция» SQL Server. Никогда не предполагайте, что предложение WHERE выполняется перед предложением SELECT.
См.: SQL Server не должен поднимать нелогичные ошибки
. На самом деле есть веские причины для этого иногда. Рассмотрим объединение двух таблиц, причем A будет намного меньше B.
select CAST(A.col1 as int), A.col2, B.col3
from A join B ...
where ... isnumeric(A.col1) = 1
Если вы проверите план запроса, сгенерированный, правильно или неправильно, SQL-сервер будет передавать данные из A в качестве ведущих строк для объединения против B. При этом он знает, что ему нужно только тянуть col2
и function on col1
. Это может привести к col1
только для запуска функции позже или для чего-то столь же тривиального, как CAST, SQL Server может также преобразовать данные во время потокового процесса.
Одно можно сказать наверняка, эта стратегия сделать SQL Server немного быстрее в некоторых запросах. Но в чисто логической перспективе я бы назвал это ошибкой.
вы можете использовать вложенную нетерпеливую нагрузку следующим образом:
Order::with('driver.trackings')
это будет загрузка драйвера, связанная с заказом и отслеживания, связанные с драйвером