Trades can also be vetoed for violating the letter, or even the spirit of the CBA.
I'm sure many of us remember the Kidd trade to Dallas being shot down because it included Devean George, who had a no-trade clause because he signed a one-year deal under certain CBA provisions. He refused to accept the trade and they all had to start again.
But there was another attempt at the same trade shot down beforehand...when Jerry Stackhouse was involved, and announced to the press that he wasn't worried because the Nets would just buy him out and he would be going back to Dallas anyway.
That wasn't technically illegal...but the league decided that it violated the spirit of the CBA, so they squashed the trade.
(It finally went through on the THIRD attempt, when Dallas S&Ted the long-retired Keith Van Horn to a contract as salary filler. As of the new CBA that isn't allowed either

)