For endnu mere sjov, prøv denne:
DECLARE @i INT
SET @i = 100
SELECT CAST(@i AS VARCHAR(2)) -- result: '*'
go
DECLARE @i INT
SET @i = 100
SELECT CAST(@i AS NVARCHAR(2)) -- result: Arithmetic overflow error
:)
Svaret på din forespørgsel er:"Historiske årsager"
Datatyperne INT og VARCHAR er ældre end BIGINT og NVARCHAR. Meget ældre. Faktisk er de i originalen SQL specifikationer. Også ældre er den undtagelsesundertrykkende tilgang til at erstatte output med stjerner.
Senere besluttede SQL-folkene, at det at kaste en fejl var bedre/mere konsekvent osv. end at erstatte falske (og normalt forvirrende) outputstrenge. Men af hensyn til sammenhængen bibeholdt de den tidligere adfærd for de allerede eksisterende kombinationer af datatyper (for ikke at bryde eksisterende kode).
Så (meget) senere, da BIGINT- og NVARCHAR-datatyperne blev tilføjet, fik de den nye(re) adfærd, fordi de ikke var dækket af den ovennævnte grandfathering.