Schema Compare results does not show the same Constraint differences when Target and Reference (source) schemas are switched or exchanged. Schema A has table A with a unique and primary constraint. Schema B has table B with no constraints. When Schema Compare is ran and Schema A is entered for Source and Schema B is entered for Source, results show the Constraints in Schema A. However, when the schemas are switched in Source and Target fields, Constraints in Schema A no longer show in results.
The ultimate goal of Schema Compare is to create a "sync script" for the Target schema to mirror the Source Schema. So, when Schema B is Source and Schema A is Target, the sync script will have a Drop Table A statement that includes the Constraint parameter. Therefore, this action is implicit with the Drop Table command and hence will not show the constraint differences.
Further information from Developers:
1) If we are dropping a table, we do not show the PK in the differences tree. We just need to show that we are dropping the table because the Constraint gets automatically dropped.
2) If we are creating a table and a PK, we show both in the differences tree because the PK needs to be explicitly created.
3) If the table exists in both schemas and we are just adding or dropping a PK, then we show it in the differences tree.
When it states "Objects only in <schema_name>" in the Results Tab, it may sound like it should list all of the objects that are only in that schema. It may "seem wrong" when users watch the differences tree and see the number of objects change slightly when they exchange or switch the reference and target schemas, however it makes sense when tables are being dropped because the constraint gets automatically dropped with it. The constraints that will get dropped along with the tables were intentionally left out to make the GUI less busy.