So I just spent 5 hours troubleshooting a problem which turned out to be due not only to the old unreliable ISNUMERIC but it looks like my problem only appears
ISNUMERIC
SQL 2012 onwards, you can use TRY_PARSE() function instead of ISNUMERIC().
SELECT TRY_PARSE('123' as int) as '123' ,TRY_PARSE('abc' as int) as 'abc'