Puede hacer esto de la siguiente manera en SQL Server 2008 o superior:
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
MyTable.UtcColumn),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM MyTable
También puedes hacer lo menos detallado:
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn)
AS ColumnInLocalTime
FROM MyTable
Hagas lo que hagas, no usa -
para restar fechas, porque la operación no es atómica, y en ocasiones obtendrá resultados indeterminados debido a las condiciones de carrera entre la fecha y hora del sistema y la fecha y hora local que se verifican en diferentes momentos (es decir, no atómicamente).
Tenga en cuenta que esta respuesta no tiene en cuenta el horario de verano. Si desea incluir un ajuste de DST, consulte también la siguiente pregunta SO:
Cómo crear la función de inicio y finalización del horario de verano en SQL Server