The CBA. He can't be traded right away.
He can waive the no-trade part. I think the answer is the NBA has a formal sign-and-trade process, MLB doesn't. So in the NBA it's all on paper. MLB, the three parties (player and two teams) can come to agreement but it's a gentleman's agreement. So the team signs the player with the intention of trading him, and then the other team can back out, because you can't put the whole sign and trade in writing beforehand. So the signing team is stuck with the player, with no recourse.