It's more about the global visibility of users. Just think of a small company who needs to communicate with a customer on a project done for him. The will already have teams set up for sales, services and so on. Now they would simply set up another team to communicate with the customer. Members would be all people facing this specific customer and all involved people from the customer.
We surely don't want the customer to have direct access into the companies directory. Even worse, If they are have several customer projects, nobody wants a customer see which other people are customers there as well.
This could be confusing as whoever is on several teams, would need to find out which teams he has in common with the other user to understand the context. Just think about a direct message coming from a customer user. At least the direct message should not show up in teams where one of the users in not member.
I would think every company would have a "whole company" team, where everyone is member, set up as well. If you think of directories, then showing only the members of the currently selected team would make a search much easier: If you're on the sales team you'll more easily spot Dave, the sales guy, when Dave, the janitor, or Dave, the operations manager, aren't on the, incidentally much shorter, list. If you want all, minus the customer people, just go to the "whole company" team.
Limiting to teams is somehow not exactly what I would have. It's rather prevent direct messages if there is no team in common.
This is somehow redundant, as having a "whole company" team would anyway lead to the result that people have a common channel. It's just more fine grained in the access, since you can prevent the customers from the customer communication teams to hang around the water cooler too if you don't include them into the "whole company" team.