Hai un cross join tra tblUserLoginDetail e tblInvoicePaymentDetails nella clausola FROM, quindi non puoi usare l.loginid nella clausola FROM
Penso che quello che vuoi sia questo con un esplicito INNER JOIN. Ho anche separato le condizioni di filtro e unione:
select
l.username,
p.payid,
p.paymentdate,
sum(p.paymentamount) as payment,
b.balance as balance
from
tblUserLoginDetail l
inner join
tblInvoicePaymentDetails p On p.customerid=l.loginid
left outer join
tblPaymentCustomerBalance b ON p.payid=b.payid
where
p.accountnumber=10009
group by
p.payid,p.paymentdate,b.balance,l.username