I have a SELECT CAST(Column to int) that has been working OK, on the assumption that the WHERE has already filtered out any rows that would cause the CAST to error. Then I changed the filtering (still excluding any problem rows) - and it failed. I finally realised that the execution plan must have changed, and that the SELECT was now processing all the rows before the WHERE did the filtering. Fixed by changing it to TRY_CAST.
Somewhat embarrassed that I didn't know that this could happen - hence took too long to track down the problem - and that it is documented, the yellow warning box in below.
But still finding it difficult, as always gone by the 'typical' logical processing order. Also, the WHERE cannot use column aliases from the SELECT, which does imply some order? And if we had a GROUP BY, wouldn't that force the WHERE to be done before the SELECT?