Default not all files are scanned. Big files might be skipped or only partially scanned. Some virusses are detected by name or extension and not the content of the file. If all files would be scanned entirely (content) a scan would take ages.
Furthermore, not all packers are extracted/executed while scanning. If a virus was inside a large 7zip file that got skipped while doing a full system scan it would remain undetected when ‘scan when executing’ was off. Remote shares or non-default extensions are not scanned in the default full system scan. When a program calls remote sources to execute or renames a .123 extension file (that has not been scanned) to .exe or .bat and executes this, this would otherwise slip the net.

So in my opinion scanning when executing is best left on.