По сути, IsNumeric бесполезен - все, что он проверяет, это то, что строка может быть преобразована в любой числовых типов. В этом случае «0D0» может быть преобразовано в число с плавающей точкой. (Я не могу вспомнить причину, но фактически «D» является синонимом «E» и означает, что это научная запись):
select CONVERT(float,'2D3')
2000
Если вы хотите проверить, что это просто цифры, то not @val like '%[^0-9]%'
будет лучшим тестом. Вы можете улучшить это, добавив также проверку длины.