VIEWs based on a UNION or UNION ALL operation are read-only because there is no single way to map a change onto just one row in one of the base tables. The UNION operator will remove duplicate rows from the results. Both the UNION and UNION ALL operators hide which table the rows came from. Such VIEWs must use a , because the columns in a UNION [ALL] have no names of their own. In theory, a UNION of two disjoint tables, neither of which has duplicate rows in itself should be updatable.
CREATE VIEW DepTally2 (emp_nbr, dependent_cnt) AS (SELECT emp_nbr, COUNT(*) FROM Dependents GROUP BY emp_nbr) UNION (SELECT emp_nbr, 0 FROM Personnel AS P2 WHERE NOT EXISTS (SELECT * FROM Dependents AS D2 WHERE D2.emp_nbr = P2.emp_nbr));