No está utilizando el valor predeterminado de la manera prevista. Es algo que SQL Server evalúa internamente en el momento de la inserción (o potencialmente se actualiza si el default
se utiliza la palabra clave).
No está diseñado para usarse en SELECT
. Considere que puede contener expresiones arbitrarias como DEFAULT CAST(GETDATE() AS INT) % 2
o llamar a una UDF escalar. Convertir de cadena a bit no evaluará esas expresiones por usted.
La única forma en que podría hacer algo como esto sería evaluarlo por separado
DECLARE @B BIT
, @Definition NVARCHAR(max)
SELECT @Definition = N'SELECT @B = '
+ object_definition(default_object_id)
FROM sys.columns
WHERE NAME = 'value'
AND object_id = OBJECT_ID('dbo.t2')
EXEC sys.sp_executesql
@Definition,
N'@B BIT OUTPUT',
@B = @B OUTPUT
SELECT t1.*,
ISNULL(t2.value, @B)
FROM t1
LEFT JOIN t2
ON t1.id = t2.id