У мене однаковий розрахунок як у пунктах SELECT, так і GROUP BY. Чи справді SQL-сервер виконує ці обчислення двічі, чи достатньо розумний це зробити лише один раз?
Проста відповідь полягає в тому, що SQL Server не дає ніяких загальних гарантій щодо того, коли і скільки разів скалярне вираження буде оцінено під час виконання.
Існують всілякі складні (і недокументовані) поведінки в оптимізаторі та механізмі виконання щодо розміщення, виконання та кешування скалярних виразів. Книги в Інтернеті не мають багато про що сказати, але все, що вона говорить :

У цьому описується одна з поведінок, на яку я нагадав раніше, відкладене виконання виразів. Я писав про деякі інші поточні поведінки (які можуть змінитись у будь-який час) у цій публікації блогу .
Інше врахування полягає в тому, що модель витрат, що використовується оптимізатором запитів , в даний час не дуже впливає на оцінку витрат для скалярних виразів. Без надійних рамків витрат поточні результати базуються на широкій евристиці чи чистому шанс.
Для дуже простих виразів, мабуть, не має великої різниці, оцінюється вираз один чи кілька разів у більшості випадків. З цього приводу я стикався з великими запитами, коли продуктивність негативно впливала, коли вираз надмірно оцінюється дуже багато разів, або оцінка відбувається на одному потоці, де було б вигідно оцінити в паралельній гілці виконання план.
Підсумовуючи це, поточна поведінка не визначена, і в планах виконання немає нічого особливого, що допоможе вам зрозуміти, що сталося (і не завжди буде зручно приєднати відладчик, щоб вивчити детальну поведінку двигуна, як у публікації блогу).
Якщо у вас трапляються випадки, коли проблеми скалярної оцінки мають значення для продуктивності, підніміть проблему з підтримкою Microsoft. Це найкращий спосіб надати зворотній зв’язок для покращення майбутніх версій продукту.