which one is faster: "insert on duplicate update" OR "update with case"
col2=if(values(col2) IS NULL, col2, values(col2)) is equal to col2=COALESCE(values(col2), col2). 
If ODKU causes UNIQUE (col2) violation, the whole query will fail (see fiddle, first query). 
The queries are not equivalent (second query will set col2=NULL for 1st record, see fiddle). 


fiddle



Finally:


  which faster: “insert on duplicate update” OR “update with case”


If no errors in queries and data INSERT .. ODKU is faster.