Poiché stai interrogando la tabella con '*', otterrai sempre tutte le colonne in entrambe le tabelle. Per omettere questa colonna, dovrai nominare manualmente tutte le colonne che vuoi interrogare. Per soddisfare l'altra tua esigenza, devi semplicemente inserire una colonna fittizia in ciascuna clausola nella query di unione. Di seguito è riportato un esempio che dovrebbe funzionare per consentire ciò che desideri -
SELECT customer.customerid, customer.customername, customer.customeraddress, newspapername, magazinename, enddate, publishedby
FROM customer
INNER JOIN
(select customerid, newspapername, null Magazinename, enddate, n.publishedby
from newspapersubscription ns, newspaper n
where publishedby in(select publishedby
from newspaper
where ns.newspapername = n.NewspaperName)
UNION
select customerid, null newspapername, Magazinename, enddate, m.publishedby
from magazinesubscription ms, magazine m
where publishedby in(select publishedby
from magazine
where ms.Magazinename = m.MagazineName))
on customer.customerid = customerid
ORDER BY customer.customerid;