Si vous avez différents champs qui ont également une signification différente, vous ne pouvez pas et ne devez pas les renvoyer dans la même position. Vous pouvez cependant "remplir les blancs" en ajoutant null à vos champs, comme ceci :
select id, name, date, null as userid, 'A' as recordtype from table1
union all
select id, name, null /*as date*/, userid, 'B' as recordtype from table2
Vous pouvez fournir un alias pour le null dans la première sélection. Vous pouvez ajouter des alias dans la deuxième sélection pour plus de clarté, mais cela ne sera pas utilisé. Vous pouvez même utiliser des valeurs constantes que vous pourrez utiliser pour distinguer ultérieurement le type d'enregistrement.