"It might not be the waiter's fault."
You're right. It happens all the time.
I've seen a waiter not get a tip because something on the menu wasn't available. I've seen a waiter not get a tip because the eater was fussy about the taste of the food.
The waiter is the waiter. They cannot ensure the supply of dishes, or even it's taste.
It's wrong to penalize the wrong person. :(