If you JOIN tables in SQL where table one has a one to many relationship to table two it is only natural what you are observing. If on the other hand you're talking about duplicate rows where whole rows are duplicated, this can be avoided by using the SELECT DISTINCT:
SELECT DISTINCT a.YearId, a.codeid, a.linkid, a.code, a.codename, a.AcctType,
b.CodeId, b.Code, b.CodeName,
c.Codeid, c.code, c.Codename,
d.FYId
FROM FinancialYear d, Accounts a
LEFT JOIN Accounts b ON(b.linkid=a.codeid)
LEFT JOIN Accounts c ON(c.linkid=a.codeid)
WHERE
a.YearId=d.FYId and
b.CodeId=a.CodeId and
a.linkid=6 and
a.CodeId=9 and
a.flag<>0 and
a.accttype='R'
Cheers!