Você não está usando o padrão da maneira pretendida. É algo que o SQL Server avalia internamente no momento da inserção (ou potencialmente atualiza se o
default
palavra-chave é usada). Não se destina ao uso em
SELECT
. Considere que ele pode conter expressões arbitrárias como DEFAULT CAST(GETDATE() AS INT) % 2
ou chamando uma UDF escalar. A conversão de string para bit não avaliará essas expressões para você. A única maneira de fazer algo assim seria avaliá-lo separadamente
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