Paulista, who had a short spell in England with West Ham but never got a start, scored once in each half, the second a penalty, and Vasco had a man sent off.
The two sit third and fourth from bottom, each with 32 points, with just eight points separating sixth place from the relegation zone. Four teams will go down.
In Belo Horizonte, Cruzeiro, who had beaten Atletico Mineiro all three times they had played them this year, went down to a late goal from Fernandinho.
Cruzeiro are on 59 points with 10 matches left, while Atletico climbed to fifth spot (42 points) with the win.
Second-placed Botafogo closed the gap at the top thanks to a 2-1 win over Flamengo at the Maracana, their first league win over their city rivals since 2000.
Gege cancelled out an early strike from Hernane before Rafael Marques glanced home a second-half header to give Botafogo the points.
Third-place Gremio faltered on Saturday when they could only draw 1-1 at Fluminense. A Rafael Sobis deflected goal in the last minute gave Fluminense a point that keeps them three clear of the relegation zone.
Sao Paulo captain Rogerio Ceni missed a chance to give the home side all three points by squandering a last minute penalty against Corinthians after Cassio got down well to save the kick.
It was Corinthians' ninth 0-0 draw in 28 games this season.
Atletico Paranaense beat Portuguesa 1-0 to stay fourth in the table and Internacional beat bottom side Nautico 4-1 to give caretaker manager Clemer his first win. Goias beat Bahia 3-1.
Both Santos and Victoria won 2-1 on Saturday to keep up their challenge for a spot in the top four and a place in next year's Copa Libertadores. Santos beat Ponte Preta and Victoria edged out Coritiba.