De la documentación en línea :
POWER ( float_expression , y )
Argumentos
expresión_ float Es una expresión de tipo float o de un tipo que se puede convertir implícitamente en float
La implicación es que lo que pase como primer parámetro se convertirá implícitamente en a float(53)
antes de que se ejecute la función. Sin embargo, este no es (¿siempre?) El caso .
Si fuera el caso, explicaría la pérdida de precisión:
La conversión de valores flotantes que usan notación científica a decimal o numérico está restringida a valores de precisión de 17 dígitos solamente. Cualquier valor con precisión superior a 17 rondas a cero.
Por otro lado, el literal 2.
es tipo numeric
...:
DECLARE @foo sql_variant;
SELECT @foo = 2.;
SELECT SQL_VARIANT_PROPERTY(@foo, 'BaseType');
GO
El | (Sin nombre de columna) |
El | : --------------- |
El | numérico |
dbfiddle aquí
... y el operador de multiplicación devuelve el tipo de datos del argumento con mayor precedencia .
Parece que en 2016 (SP1), se conserva toda la precisión:
SELECT @@version;
GO
El | (Sin nombre de columna) |
El | : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------- |
El | Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) <br> 28 de octubre de 2016 18:17:30 <br> Copyright (c) Microsoft Corporation <br> Express Edition (64 bits) en Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600:) (Hypervisor) <br> |
SELECT POWER(2.,64.);
GO
El | (Sin nombre de columna) |
El | : ------------------- |
El | 18446744073709551616 |
dbfiddle aquí
... pero en 2014 (SP2), no son:
SELECT @@version;
GO
El | (Sin nombre de columna) |
El | : ------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------ |
El | Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) <br> 17 de junio de 2016 19:14:09 <br> Copyright (c) Microsoft Corporation <br> Express Edition (64 bits) en Windows NT 6.3 <X64> (Build 9600:) (Hypervisor) <br> |
SELECT POWER(2.,64.);
GO
El | (Sin nombre de columna) |
El | : ------------------- |
El | 18446744073709552000 |
dbfiddle aquí