The object tree is broken for MS SQL Server databases.
In a SQL server instance containing multiple databases when the cataloge is loaded / changed ALL listed databases in the tree are updated with the objects of the database selected in the "catalog" dropbox.
Expectation w'd be a normal browsing of database objects with respect to the objects contained in each database.
I suggest the cataloge selection should only have the functionality of a USE command, e.g. selecting the cataloge "testDb" equals "use testDB".
When a JDBC connection's setCatalog() method is called, which SQuirreL's catalogs combo box does and is supposed to do, the state of the connection changes in such a way that for example the result of calling DataBaseMetaData.getTables(...) returns different results. The code below shows this on the example of MSSQL.
Because of this it's correct SQuirreL reloads the meta data and thus reflects the connection's state change. As a consequence this bug won't be fixed.