Police said gunmen entered the Orlando East tavern in the early hours of Sunday morning and started firing randomly at a group of young people.
They then fled the scene in a white minibus. No motive for the attack has been established, police said.
Several more people are in a critical condition in hospital, the BBC's Nomsa Maseko reports.
The victims are believed to be between 19 and 35 years old.
"Bodies were on top of each other with blood all over. We were looking for our loved ones, we had to jump over bodies looking for our brothers," said local resident Ntombikayise Meji.
Gauteng province's head of police, Lt-Gen Elias Mawela, told the BBC the shooting appears to have been "a cold-blooded attack on innocent tavern patrons".
A press statement released by his office said the gunmen had been armed with rifles and 9mm pistols when they entered the bar.
Police are searching for the suspects, whose identities remain unknown, it said.
Thaban Moloi, a community leader in Soweto, was angered by the amount of time it took police to arrive at the scene.
"It's terrible, I'm telling you. People don't know what to do. If you were there you could see women and children crying," he said.
Mr Moloi said the attack happened at 23:00 local time (21:00 GMT) on Saturday but police didn't arrive until 04:00 on Sunday.
"It took five hours for them to come, honestly," he said.