Another perspective.
Instead of using the two custom-post-type ‘team’ and ‘player’. You can use them as a single custom-post-type ‘participant’.
Participant itself is a hierarchical post type, teams as the first level and player as it’s child. That way there wouldn’t be a player with more than 1 teams.
If you are doing your own theme, you can make a conditional, checking if($post->post_parent)
The custom-post-type can be assigned to a ‘competition’ taxonomy, preferably not hierarchical.
Hope this help