Depending on the version of SCCM you are using can vary your query assuming you’re on the new and shiny 2012
So Collection A is fairly simple, something along the lines of:
select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System where SMS_R_System.SystemOUName = "Domain.local/Software Install"
Collection B would EXCLUDE Collection A and have a query for if the software was installed:
select * from SMS_R_System where SMS_R_System.ResourceId not in (select SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID from SMS_G_System_ADD_REMOVE_PROGRAMS where SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName = "Your Software Here")
Now if you are still on 2007 your Collection A would still be the same but your Collections B would be something along the lines of:
select * from SMS_R_System where SMS_R_System.ResourceId not in (select SMS_G_System_ADD_REMOVE_PROGRAMS.ResourceID from SMS_G_System_ADD_REMOVE_PROGRAMS where SMS_G_System_ADD_REMOVE_PROGRAMS.DisplayName = "Your Software Here") and SMS_R_System.SystemOUName != "Domain.local/Software Install"
adding that it must also not be a member of your OU.