The impact peeled away the front of one train car and threw at least one other off the tracks, causing amputations and other severe injuries, witnesses and officials said. Train service across across Western Europe was disrupted.
Lodewijk De Witte, governor of the province of Flemish Brabant, told reporters four hours after the crash that the official death toll was 25. He said one train "apparently did not heed a stoplight."
The trains collided in light snow just outside of the station at Buizingen around 8:30 a.m. (0730GMT).
The force of the collision smashed one train deep into the front of the other, tearing back the metal sides. The trains tipped high into the air and broke overhead power lines.
It was the most serious Belgian train accident since March 28, 2001, when eight people died when a crowded train plowed into an empty train driving on the wrong tracks. Belgian National Railways spokesman Jochen Goovaerts said his agency was awaiting the outcome of the investigation before discussing the cause of Monday's accident.
The railway earlier told the VRT radio network that 25 people had died. The suburb's mayor, Dirk Pieters, told VRT that emergency responders were reporting that 20 had been killed.
"It was a nightmare," Christian Wampach, 47, told The Associated Press after medical workers bandaged his head at a sports complex where the less seriously injured were treated.
"We were thrown about for about 15 seconds. There were a number of people injured in my car but I think all the dead were in the first car," said Wampach, who was in the third car of a Brussels-bound train.
Photos from the scene showed rescuers pulling the wounded from a car that appeared to have tipped onto its side. Other emergency officials rushed victims on stretchers along the tracks.
"When we came out, we saw dead bodies lying next to the tracks, some mutilated," said Patricia Lallemand, 40, who was in the same car as Wampach and was unhurt.
Belgian Prime Minister Yves Leterme canceled a trip to Kosovo, turning around his plane minutes after landing at Pristina's main airport, the Kosovo prime minister's office said.
Eurostar reported on its website that its high-speed trains had suspended service in and out of Brussels and could remain shut down all day.
The international high-speed network Thalys, which links major cities in Belgium, France, Germany and the Netherlands, temporarily halted all traffic because its trains use the same rails as commuter lines near Hal, said Patricia Baars, a company spokeswoman.
At least four Thalys trains were stopped en route, and the railway operator deployed staffers to stations where they were rerouted to provide assistance to travelers on board, she said.
"No (Thalys) train is moving for the moment ... it's very hard to know today when services will resume," she said. "It appears this was a very severe accident."
Thalys has at least 25 round-trip trains operating between Paris and Brussels each day, plus seven linking Brussels and Amsterdam and six from Belgium to Cologne, Germany.