Respostas:
Não há nenhuma diferença real, mas quando você começa a usar DATETIME2valores ou funções que retornam DATETIME2valores, você obtém erros.
SELECT SYSDATETIME() - 1 AS [Incompatible]
Msg 206, Nível 16, Estado 2, Linha 17 Tipo de operando confronto: datetime2 é incompatível com int
Para isso, é necessário usar as funções matemáticas da data.
SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
Aaron Bertrand fala brevemente sobre esse assunto em sua série Bad Habits to Kick .
Ao contrário do que afirma uma das outras respostas, as duas opções são oficialmente suportadas e documentadas pelo SQL Server: datetime - numbernão é um comportamento indefinido.
A grande vantagem de
DATEADD(d, -2, GETUTCDATE())
é o fato de ser auto-documentado : seu objetivo é imediatamente óbvio.
GETUTCDATE() - 2, por outro lado, conta com o leitor que conhece a definição da datetime - numberoperação. Sim, atualmente pode ser o T-SQL idiomático, mas o fato de isso não ser mais suportado datetime2implica que as gerações futuras de desenvolvedores do SQL Server talvez não estejam mais familiarizadas com ele.
datefoi adicionada). Está um pouco bagunçado.