Static or dynamic QR code: which one you need
It is the one important decision to make before generating a code, and plenty of people make it without knowing it exists. The difference is not in the picture or the quality: it is in where the information lives, and everything else follows from that.
What each one is
A static code stores the information inside the picture itself. If the code leads to myshop.com, that address is literally encoded in the squares. When somebody scans it, the phone reads the text and goes straight to the destination. Nobody sits in the middle.
A dynamic code stores a short address pointing at an intermediary server, something along the lines of qr.service.com/a7x9. When somebody scans it, the phone goes to that server first, which looks up where to send them and redirects to the real destination. That extra hop is what enables the two features sold as advantages: changing the destination without reprinting, and counting scans.
What you gain with a dynamic one
Two concrete things. The first is being able to change the destination after printing: useful when a thousand flyers are already out there and the promotion changed. The second is the statistics: how many scans, when, from which country and on what kind of phone.
For some cases that justifies the spend. An outdoor campaign where the destination rotates, packaging with a multi-year run that will point at different things by season, or any situation where measuring the result is part of the job.
What you lose, and it is more than it looks
You lose independence, and this is the point that almost never shows up in the comparison table the paid services publish. Your printed codes stop working if that service shuts down, if they change their terms, or if you forget to pay one month. This is not a theoretical risk: it happened with several link shortening services that closed and took millions of printed links down with them, on material already out in the world.
You also lose privacy, both yours and that of whoever scans. Every read passes through somebody else's server which logs when, from where and on what device. And you lose a little speed: there is an extra hop before reaching the destination.
Then there is the obvious cost: nearly every dynamic QR service is a subscription, and the price usually scales with the number of codes and scans.
How to get the best of both
There is a third option that solves most cases and almost nobody mentions: a static code pointing at an address on your own domain, which you redirect wherever you like.
The code points at myshop.com/menu, forever. On the other side, that address redirects wherever suits you today, and you can change it whenever you want without touching anything printed. You get exactly the flexibility of a dynamic code. And because the traffic runs through your own server, your analytics give you the scan numbers, so you get the statistics too.
What it takes is a domain of your own, which costs a few dollars a year, and knowing how to set up a redirect, which on any modern host is two lines of config. The difference is that the infrastructure is yours: nobody can switch it off or charge you more for it next year.
The practical rule
If the destination will never change, use static and move on. A WiFi code, a vCard, an inventory label: there is nothing to update and no reason to pay for the option.
If the destination might change and you have your own domain, use static pointing at your domain with a redirect. It is the option most people should pick and the one fewest people pick.
If the destination might change, you have no domain and no way of getting one, and you need detailed statistics, then a dynamic service does make sense. Knowing that you are renting the continued functioning of your printed codes.