IsNumeric devuelve 1 si el valor varchar se puede convertir a CUALQUIER tipo de número. Esto incluye int, bigint, decimal, numérico, real y float.
La notación científica podría estar causándote un problema. Por ejemplo:
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
Hay un truco que puedes usar con IsNumeric para que devuelva 0 para números con notación científica. Puede aplicar un truco similar para evitar valores decimales.
EsNumérico(TuColumna + 'e0')
EsNumérico(TuColumna + '.0e0')
Pruébalo.
SELECT CAST(myVarcharColumn AS bigint)
FROM myTable
WHERE IsNumeric(myVarcharColumn + '.0e0') = 1 AND myVarcharColumn IS NOT NULL
GROUP BY myVarcharColumn