Вы правы, было бы безопасно передать таким образом целое число. Однако есть и другая сторона истории.
Хотя можно считать безопасным просто отформатировать int и создать выражение SQL, существует также соображение производительности. Когда сервер SQL видит запрос в первый раз, он создает и кэширует план выполнения для этого запроса. В следующий раз, когда будет выполнен тот же запрос, план выполнения будет использован повторно.
Если вы передадите разные строки, это будет рассматриваться как отдельные запросы, требующие отдельных планов выполнения. Если вы каждый раз передаете один и тот же параметризованный запрос (с разными параметрами), SQL Server будет повторно использовать первый план выполнения.
Даже если вы не заботитесь о выигрыше в производительности, я бы все равно использовал параметризованный запрос для всех запросов к базе данных, даже для тех, которые можно считать «безопасными», как вы указали, - просто чтобы быть последовательными в способ, которым приложение обращается к данным. Если вы всегда используете параметризованный запрос, это также избавит вас от необходимости определять, является ли запрос каждый раз безопасным, чтобы решить, каким способом запрашивать базу данных.