Tara Kizer notes that there are limits in what TRY/CATCH blocks handle in SQL Server:
It’s well documented in Books Online (BOL). If you’re like me, then tl;dr. Are we even calling it Books Online these days? I still say “bookmark lookup” instead of “key lookup”. I suppose I’ll be saying Books Online for quite some time too. At least these days it really is online.
Here’s a shortened version:
Warnings or informational messages that have a severity of 10 or lower
Errors that have a severity of 20 or higher that stop the session
Attentions
When a session is KILLed
It’s important to know that not everything gets caught, particularly major issues.