Поскольку вы устанавливаете для полей значение INT, у вас возникает проблема, заключающаяся в том, что оба поля xsi: nil = "true" и значение 0 будут иметь значение 0, поскольку значение по умолчанию для INT равно 0.
Выможет сначала преобразовать в VARCHAR, чтобы обнаружить пустую строку (''), которую производят строковые поля, содержащие xsi: nil = "true", а затем преобразовать результат в INT.
Этот SELECT даст вам ответ, который вы после
SELECT CONVERT(INT,NULLIF(ParamValues.TaskChainerTask.query('Property1').value('.', 'varchar(5)'),'')) AS Property1
, CONVERT(INT,NULLIF(ParamValues.TaskChainerTask.query('Property2').value('.', 'varchar(5)'),'')) AS Property2
FROM @a.nodes('(/TestSet/Element)') AS ParamValues (TaskChainerTask)
В результате вы получите:
Property1 Property2
1 1
NULL 2
3 3