Да, в моем тестировании, когда вы приводите IEnumerable, это определяет SQL запроса. Любая дополнительная композиция запроса, которую вы выполняете после этого, будет сделана в памяти после выполнения запроса.
Предположим, у вас есть базовый запрос, который загружает список пользователей и возвращает IEnumerable. Затем, прежде чем вы на самом деле выполните этот список (тем самым выполняя запрос), вы также добавляете .Where (i => i.username = 'bob'). В этом случае он выполнит весь выбор, а затем применяет LINQ-to-Objects в фильтре памяти для части "где имя пользователя = 'bob'", что, вероятно, не то, что вы хотите, вместо этого вы хотите, чтобы все это запускаться как часть инструкции SQL.
Так что да, всегда используйте IQueryable, когда вы можете, чтобы ваши полностью собранные композиции запускались сразу.