yo tomé el codigo de tu post sin cambiarle nada y ami no me genera el error que comentas...
aún así podrias recalcar el tipo de dato a la salida...
Código SQL
[-]select
cast(0 as smallint) as idtipoclient,
cast('Todos' as varchar(30)) as tipoclient
UNION ALL
SELECT
idtipoclient::SMALLINT,
tipoclient::VARCHAR(30)
FROM tiposcliente
order by idtipoclient;
por lo de la vista... mejor... para eso son las vistas... nos evitamos consultas tan largas dentro del programa.