IB has better execution for me. I've had countless examples where the same trade is sent to both (it is always sent to ToS first) and canceled if one of them fills (or partially fills), sometimes both fill, sometimes ToS fills first but for the most part IB fills first.