The boat was sliced in two by the oncoming water taxi between the islands of San Servolo and Certosa, La Repubblica reported.
The boat passengers, all from Venice, were thrown into the water.
A 24-year-old man is intensive care at Mestre hospital after suffering chest trauma, while a 21-year-old man, who suffered a broken leg and a head injury, is at the same hospital.
The third person – a 19-year-old woman – was treated in hospital before being discharged. The water taxi’s driver was slightly injured.
According to an initial investigation, the boat was travelling without lights on and did not give the right of way to the water taxi, La Repubblica said.
The incident comes three years to the day a 50-year-old German tourist was crushed to death by a reversing waterbus, which bumped into the gondola he was riding with his family near the city's famous Rialto Bridge.
His wife, three children and the gondolier were also thrown into the water, with his three-year-old daughter suffering head injuries.