Terrans have the ability to end the game in TvT although it can go longer. Doom drops, base trades, or even just choking their opponent out with tanks or liberator harass doing economic damage.
ZvZ is very different. 99% of zerg’s fighting units are ground units and lurkers shred those to an extreme. Zerg doesn’t have an ability to bypass terrain. Don’t point out the nydus, because it doesn’t work. It’s way to easy too shut down. This means a Zerg can camp a ton of lurkers at a couple choke points and he is basically unbreakable using all units except air units which aren’t affected by lurkers. That’s where the viper comes in. Zerg can make corruptors (worthless) mutas (shredded by parasitic bomb) and broods (abducted).
Zerg is a ground-based race (which is its biggest strategic weakness) and that’s a problem when lurkers make it impossible to attack with ground units.
A similar problem exists in TvZ. Terran has insanely powerful ground-control units, and all of zerg’s fighting units (worth making) are ground based. It makes it pretty much impossible to end a game vs a terran in a timely fashion.