The protest turned violent just as a World Cup game between England and Uruguay was ending roughly 15 miles (25 km) away on the other side of Sao Paulo.
There were no initial reports of injured protesters, a police spokeswoman said, or of foreign soccer fans getting caught up in the violence.
The march started off peacefully as roughly 1,300 people commemorated the one-year anniversary of successful efforts to prevent a transit fare hike. Later, some protesters began breaking storefront windows and setting fires.
Television images showed groups of masked men spray painting graffiti on cars, firing off rockets and smashing public property as police responded with tear gas.
While a number of anti-government protests have broken out in Brazil since the World Cup began, most have been on a much smaller scale. Recent protests, including a demonstration on Wednesday in Sao Paulo over low-income housing, have been non-violent.
A police spokeswoman said she was unable to provide detailed information on the extent of the damage or efforts to control the violence.
A wave of protests last June drew hundreds of thousands of Brazilians into the street over a range of grievances, including poor public services, corruption, and excessive spending on mega-events such as the World Cup.
While a small minority of the protesters on Thursday chanted anti-World Cup slogans, most focused on highlighting the group’s success in preventing a roughly 10 cent increase in transport fares last year.
“This protest today isn’t against the Cup but more of a commemoration of what happened a year ago,” said Ana, a protester who declined to give her last name. “We took to the streets today to show that we were victorious a year ago but also to reinforce that our goal is free transportation for all.”
The protest shut down one of the city’s main thoroughfares, though the impact of traffic was limited due to a national holiday on Thursday.
(Reported by Asher Levine; Editing by Steve Orlofsky)