Primarily because of the number of times I've executed a build script, when the the database it was trying to go to in the initial USE command didn't exist. Then I got to spend the next few hours deleting hundreds of objects from my now polluted [master] database.
However, if I start from [tempdb] and the USE [..] fails, it dumps everything there instead and I can easily clear it by just re-starting the SQL Server.
Yep - master getting cluttered up is protected by (at least) three controls/processes/habits:
1) Default database tempdb except for (human) sysadmin accounts. Defeated by human mistakes.
2) Don't give rights to Master except to sysadmin accounts. Defeated in part by (third party) apps that require access to, say, master.dbo.xp_cmdshell, and in whole by (third party) apps that end up with sysadmin.
3) In scripts you write/alter yourself, put USE tempdb; USE YourDB; at the top, so if YourDB doesn't exist, it's already pointed at tempdb. Defeated by scripts you don't write/alter, such as the automated build scripts mentioned above.