The practical difference
A static code contains the destination itself. Print it on a thousand flyers pointing at a campaign page, and when that campaign ends the flyers point at a dead page forever.
A dynamic code contains a short URL that you control. The printed code never changes; where it sends people is a setting you can edit. The same poster can point at a menu today and a promotion next month.
Scan tracking
Because a dynamic code routes through a redirect you own, every scan is a request you can count — volume, timing, and rough location. A static code is invisible; the destination cannot distinguish a QR scan from a typed URL.
This is the reason to prefer dynamic codes even when the destination will never change. Without the redirect there is no way to tell whether the printed material worked at all.
The trade-off
A dynamic code depends on the redirect service staying alive. If that service disappears, every printed code stops working — a static code would have kept resolving. Weigh that against permanence: a code etched into signage should point somewhere you will control for as long as the signage exists.