The bus veered off the road and fell close to railway lines in the district of Mestre, which is connected to Venice by a bridge.
The cause of the accident was unclear. Venice city councillor Renato Boraso said one line of enquiry was that the driver, a 40-year-old Italian who was among those killed, had been taken ill before the crash.
"It's an appalling tragedy, the city is in mourning," Boraso told Sky Italia television.
He said the coach had been carrying 40 passengers, of whom 21 had died and 18 were injured. The death toll could rise because several of those hurt were in a critical condition, he added. Venice's city hall said the injured people had been taken to nearby hospitals, with four in a serious condition.
Officials said the vehicle fell around 15 metres (50 feet) onto electricity lines and caught fire at around 7:45 p.m. local time (1745 GMT).