Представление не извлекает все данные, оно больше похоже на именованный запрос, доступный для использования с другими запросами. Когда представление фильтруется, оно просто добавляет этот фильтр к запросу, определенному в этом представлении.
Запрос CTE больше похож на локальное представление, на него можно ссылаться только там, где он определен (после; с). Кроме того, это не материализовано, и я не знаю никакого способа материализовать запрос CTE, как мы можем сделать с представлениями (путем добавления кластеризованного индекса).
Функция - худший вариант, вы сказали, почему. Я бы выбрал способ CTE, если «встроенный» запрос будет использоваться только здесь.