varchar値を任意の数値タイプに変換できる場合、IsNumericは1を返します。これには、int、bigint、decimal、numeric、real、floatが含まれます。
科学的記数法が問題を引き起こしている可能性があります。例:
Declare @Temp Table(Data VarChar(20))
Insert Into @Temp Values(NULL)
Insert Into @Temp Values('1')
Insert Into @Temp Values('1e4')
Insert Into @Temp Values('Not a number')
Select Cast(Data as bigint)
From @Temp
Where IsNumeric(Data) = 1 And Data Is Not NULL
IsNumericで使用できるトリックがあり、科学的記数法の数値に対して0を返します。同様のトリックを適用して、10進値を防ぐことができます。
IsNumeric(YourColumn +'e0')
IsNumeric(YourColumn +'.0e0')
試してみてください。
SELECT CAST(myVarcharColumn AS bigint)
FROM myTable
WHERE IsNumeric(myVarcharColumn + '.0e0') = 1 AND myVarcharColumn IS NOT NULL
GROUP BY myVarcharColumn