Thanks for your posts and reminders to batch separator settings.
I referred to GO as a common and widely used batch separator in SQL Server world, not to it as a Transact SQL statement. I wanted to remind that everything in the batch staring with CREATE/ALTER PROCEDURE statement belong to the stored procedure regardless how the batch reaches its end.
I had many situations that stored procedures perform some unexpected reads and I/O activities because someone forgot some SELECTs after the SPs BEGIN/END boundary. A common case is playing either with EXECUTE sp or some SELECT statements to verify if the SP works and then leaving the statements in the same batch with the assumption that everything out of BEGIN/END does not belong to the SP. And usually these statements don't break the SP contract and if they don't produce significant I/O it is not easy to identify them.
Do Not Optimize for Exceptions!