The train's brakes failed and it was unable to stop in the town of Warangal in Andhra Pradesh state, said Bandaru Dattatreya, India's minister of state for railways.
"They ... could not stop at the station due to brake failure," he said. At least 18 people were killed, including 12 on the road, a railway spokesman said on condition of anonymity.
At least six of the dead were passengers and six were in the fish market under the bridge. Other officials said the engine smashed to the ground onto parked three-wheel taxis, and occupants of the three-wheelers were also killed.
Television pictures showed trapped passengers peering through the barred windows of carriages swaying precariously from the bridge. At least 25 people were injured, and the casualty toll could rise as rescuers cut open the carriages, police said.
The train was put onto a loop line but still failed to stop, and capsized when it reached the bridge, a few yards from the station, said Nalin Prabhat, the local superintendent of police. He said the train was traveling at 34 mph.
Sammaiah, the assistant driver of the engine, said he had realized the brake failure only 1.8 miles ahead of the Warangal station. He uses a single name.
"I tried to contact the station master over walkie talkie but failed to get any response. By that time all the controls had gone down to zero," Sammaiah told The Associated Press from his hospital bed. "It was a mechanical failure in the engine."
Abdul Rasheed, the senior driver, lay unconscious on a bed nearby with broken limbs and a bloody wound behind his ear.
The Golconda Express was headed for Secunderabad, near the state capital of Hyderabad.
The accident occurred outside the Warangal railway station, 95 miles north of Hyderabad, at about 10:30 a.m., said Prabhat, the police superintendent.
Six officials of the South Central Railways were suspended after the accident pending an inquiry by the railroad safety commissioner.