What are the technical differences between F12 render and viewport preview?
The differences between render operator and viewport render are that the viewport render has:

Blender Internal


No motion blur (sampled)
No panorama camera mode
No anti-aliasing


Eevee


Uses the Viewport sampling setting
No Overscan (see Objects, shadows and reflections not rendering in EEVEE)
Unlike Cycles, motion blur is previewed (only in camera view)


Cycles


No motion blur
No tiled rendering.
Uses preview progressive samples setting.
Render layer settings will be ignored.
Pause and resume
Uses dynamic BVH by default.See Why is rendered viewport faster than rendering individual frames? and What does static/dynamic BVH do?


All


No compositing.
Modifiers and objects preview settings are used:


Object render/preview visibility options.
modifier render/preview visibility options.
subsurf preview/render resolution.
multires preview/render resolution.
curve/metaball preview/render resolution

Particle display percentage is used.
A preview can be made from any view-port, a render can only be made from a camera object.
No way to save output (except for a screenshot).


Note: I'm not sure if this list is complete, these may not be the only differences.