Метод .exist () возвращает 1, если выражение XQuery оценивается как ненулевой список узлов, в противном случае он возвращает 0. Так что он будет возвращать 1 каждый раз в вашем примере.
Если я вас правильно понимаю, вы хотите, чтобы он возвращал 1, когда значение является целым числом, и 0, когда это XML?
В этом случае вам нужно сделать следующее:
declare @x xml
set @x='<root><a>12</a></root>'
select ISNUMERIC(CAST(@x.query('/') AS nvarchar))
Это должно вернуть 0
declare @x xml
set @x='12'
select ISNUMERIC(CAST(@x.query('/') AS nvarchar))
Это должно вернуть 1