After a quiet opening with little goalmouth action, the game changed when both sides had a player dismissed for their part in an ugly incident on 38 minutes.
Nice midfielder Carlos Eduardo was sent off for stamping on the neck of Ismael Diomande after the Saint-Etienne defender had brought him down with a wild challenge. The tackle earned Diomande his second yellow card and Eduardo saw red for his reaction.
The biggest chance of the first half then came when a long ball forward sent Alassane Plea through on goal, but the retreating Florentin Pogba made a crucial intervention to clear the danger just as the Nice striker was about to pull the trigger.
Ricky van Wolfswinkel came close to breaking the deadlock midway through the second half, but he just failed to connect with a dangerous in-swinging free kick.
The result means Saint-Etienne are now unbeaten in nine games and remain fourth in Ligue 1, while Nice sit 11th.