Qualifying the column names seems like a good practice.
In general pl/pgsql seems to be pretty dumb about sql, and it acts almost like the 'c' preprocessor with respect to pl/pgsql variables in sql statements. If it finds something in an sql statement that matches a pl/pgsql varible name it just goes ahead and does a substitution of the value. The other day I found a for loop that looked something like the following:
for t in select .... from foo t,
pl/pgsql tried to substitute the value for the record t into the table alias 't', which resulted in an error.