Я столкнулся с тем же самым, и после некоторого исследования, я думаю, что это из-за оптимизации, которую компилятор делает с лямбда-выражениями. Существуют некоторые накладные расходы при создании делегата из лямбда-выражения. Я думаю, что он должен лениво инициализировать скрытое статическое поле, содержащее делегат при первом обращении к лямбде, чтобы он мог повторно использовать уже созданный делегат в будущих вызовах.
Причина, по которой я думаю, заключается в том, что если лямбда захватывает какие-либо переменные, это не вызывает проблему SAFE. Было бы разумно, если бы он захватывал переменные, вам нужно было бы создавать разные делегаты для каждого его вызова, но если лямбда-код полностью автономен, он может кэшировать его в целях эффективности.
Microsoft исправила проблему в SQL 2008, но не исправила ее в SQL 2005, поэтому, если необходимо поддерживать существующие установки SQL 2005, все, что требуется, - это устранить «статически оптимизируемые» лямбды, а не все лямбды во всей сборке.