DATEADD issue when negative number is used with MONTH datepart
<p>From the <a href="https://msdn.microsoft.com/en-us/library/ms186819.aspx" rel="nofollow">DATEADD</a> documentation:</p>

<blockquote>
  <p>If datepart is month and the date month has more days than the return
  month and the date day does not exist in the return month, the last
  day of the return month is returned. For example, September has 30
  days; therefore, the two following statements return 2006-09-30
  00:00:00.000:</p>
  
  <p>SELECT DATEADD(month, 1, '2006-08-30');</p>
  
  <p>SELECT DATEADD(month, 1, '2006-08-31');</p>
</blockquote>

<p>The <code>SQL Server</code> knows that the last day of <code>2016-03</code> is <code>31</code> and the last day of the <code>2016-04</code> is <code>30</code>:</p>

<pre><code>SELECT DAY(EOMONTH('2016-03-01')) -- 31
SELECT DAY(EOMONTH('2016-04-01')) -- 30
</code></pre>

<p>Then why the following:</p>

<pre><code>SELECT DATEADD(MONTH, -1, '2016-04-30')
</code></pre>

<p>returns <code>2016-03-30 00:00:00.000</code> instead <code>2016-03-31 00:00:00.000</code>?</p>

<p>Also, if I have the following:</p>

<pre><code>SELECT  DATEADD(MONTH, -1, '2016-03-31')
</code></pre>

<p>it correctly returns <code>2016-02-29 00:00:00.000</code>.</p>