Non stai utilizzando l'impostazione predefinita nel modo previsto. È qualcosa che SQL Server valuta internamente al momento dell'inserimento (o potenzialmente aggiorna se default
viene utilizzata la parola chiave).
Non è destinato all'uso in SELECT
. Considera che può contenere espressioni arbitrarie come DEFAULT CAST(GETDATE() AS INT) % 2
o chiamando un UDF scalare. Il cast da stringa a bit non valuterà queste espressioni per te.
L'unico modo per fare una cosa del genere sarebbe valutarla separatamente
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