Selecting rows that might contain null values based on column comparison
You can also try a solution based on window MAX():

WITH
  FirstMatches AS
  (
    SELECT
      *,
      MAX(CASE WHEN DateA = DateB AND DateB BETWEEN '2011-01' AND '2011-12' THEN DateA END)
        OVER (PARTITION BY Idkey) AS FirstDateA
    FROM
      table1
  )
SELECT
  Idkey,
  DateA,
  DateB,
  FieldA,
  FieldB
FROM
  FirstMatches
WHERE
  DateA &lt;= FirstDateA
;


This solution assumes that the order of rows implied by "starting from" is DateA DESC, same as ypercubeᵀᴹ's solution.

Note that while the query will be looking for rows with matching dates specifically among those where DateB is in the year 2011, the output may include rows with DateA dates earlier than 2011. If you only meant to get rows where DateA is in 2011, you can specify that as a WHERE filter in the CTE, also removing the range filter for DateB in the CASE expression as no longer necessary:

WITH
  FirstMatches AS
  (
    SELECT
      *,
      MAX(CASE WHEN DateA = DateB THEN DateA END)
        OVER (PARTITION BY Idkey) AS FirstDateA
    FROM
      table1
    WHERE
      DateA BETWEEN '2011-01' AND '2011-12'
  )
SELECT
  Idkey,
  DateA,
  DateB,
  FieldA,
  FieldB
FROM
  FirstMatches
WHERE
  DateA &lt;= FirstDateA
;