There is this concept called dynamic SQL, which means the SQL statement is formed base on certain conditions or situation. In this case it is based on the presence of certain fields in your XML. The usual ones are called static SQL query, and its form keeps the same, and is not inferenced by what is going on.
Performance is affected by using dynamic SQL, but the solution is absolutely valid, and in some situation preferred.
Dynamic SQL is usually considered as a ++ for a database, as it increase flexibility and power, although you have to use it with caution, but what not. A good example where dynamic SQL is preferred is your search screens, as people might skip certain optional search criteria.