I worked for a company whose product was a cash register application. It is certainly possible for the software to be programmed to open the drawer only for cash tender. Whether the programmers of other cash registers thought of that may be open to question. It’s certainly one of the simpler things for programmers to think of.
Better still, the register should be configurable. In our register, each individual type of tender (cash, check, credit card, debit card, etc.) was individually configurable with about 15 attributes that could be defined for each tender. One of them was whether to open the drawer.
If, for example, your drawer has a slot in the front, then you don’t need to open the drawer for checks because the cashier can just stick the check in the slot. Unless the check is for more money than the amount due (that is, the customer is getting some cash back). Then you have to open the drawer. And if the drawer doesn’t have a slot, then you open the drawer for checks.
For credit cards, you have to put the store’s copy of the credit slip (called the “drawer copy”) into the drawer somehow. If no slot in drawer, then open the drawer. For debit cards, you need to open the drawer if there is cash back.
I should really hope that ALL non-trivial cash register systems are configurable about stuff like that. If you see drawers popping open when the really don’t need to (as I often also see), then my first guess is that the register simply isn’t configured sensibly, unless there is some real reason the store management wants it that way (like the case with the postage stamps).
As for NO SALE: If the store management prefers, this function might require a manager. In our register, every function could be configured, if desired, to require the presence of a manager. For example, some merchants insisted that only a manager could ring up a refund while other stores allow any cashier to do that. Some store managers require that even voiding a line requires a manager.